60806040523480156200001157600080fd5b506040518060400160405280600881526020017f4e584e546f6b656e0000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f4e584e000000000000000000000000000000000000000000000000000000000081525081600390805190602001906200009692919062000345565b508060049080519060200190620000af92919062000345565b505050620000d2620000c6620000f460201b60201c565b620000fc60201b60201c565b620000ee3369d3c21bcecceda1000000620001c260201b60201c565b62000593565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000235576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200022c9062000448565b60405180910390fd5b62000249600083836200033b60201b60201c565b80600260008282546200025d919062000498565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620002b4919062000498565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200031b91906200046a565b60405180910390a362000337600083836200034060201b60201c565b5050565b505050565b505050565b8280546200035390620004ff565b90600052602060002090601f016020900481019282620003775760008555620003c3565b82601f106200039257805160ff1916838001178555620003c3565b82800160010185558215620003c3579182015b82811115620003c2578251825591602001919060010190620003a5565b5b509050620003d29190620003d6565b5090565b5b80821115620003f1576000816000905550600101620003d7565b5090565b600062000404601f8362000487565b91507f45524332303a206d696e7420746f20746865207a65726f2061646472657373006000830152602082019050919050565b6200044281620004f5565b82525050565b600060208201905081810360008301526200046381620003f5565b9050919050565b600060208201905062000481600083018462000437565b92915050565b600082825260208201905092915050565b6000620004a582620004f5565b9150620004b283620004f5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620004ea57620004e962000535565b5b828201905092915050565b6000819050919050565b600060028204905060018216806200051857607f821691505b602082108114156200052f576200052e62000564565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b611fdb80620005a36000396000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c80638365c7a7116100ad578063c62125ed11610071578063c62125ed14610333578063cdc324a91461034f578063dd62ed3e1461037f578063f2fde38b146103af578063f4cdda36146103cb5761012c565b80638365c7a71461027b5780638da5cb5b1461029757806395d89b41146102b5578063a457c2d7146102d3578063a9059cbb146103035761012c565b8063313ce567116100f4578063313ce567146101e957806339509351146102075780635b88349d1461023757806370a0823114610241578063715018a6146102715761012c565b806306fdde0314610131578063095ea7b31461014f57806318121d6a1461017f57806318160ddd1461019b57806323b872dd146101b9575b600080fd5b6101396103fb565b6040516101469190611bbb565b60405180910390f35b61016960048036038101906101649190611609565b61048d565b6040516101769190611ba0565b60405180910390f35b61019960048036038101906101949190611645565b6104ab565b005b6101a3610667565b6040516101b09190611d5d565b60405180910390f35b6101d360048036038101906101ce91906115ba565b610671565b6040516101e09190611ba0565b60405180910390f35b6101f1610769565b6040516101fe9190611d78565b60405180910390f35b610221600480360381019061021c9190611609565b610772565b60405161022e9190611ba0565b60405180910390f35b61023f61081e565b005b61025b60048036038101906102569190611555565b61099f565b6040516102689190611d5d565b60405180910390f35b6102796109e7565b005b61029560048036038101906102909190611555565b610a6f565b005b61029f610b33565b6040516102ac9190611b85565b60405180910390f35b6102bd610b5d565b6040516102ca9190611bbb565b60405180910390f35b6102ed60048036038101906102e89190611609565b610bef565b6040516102fa9190611ba0565b60405180910390f35b61031d60048036038101906103189190611609565b610cda565b60405161032a9190611ba0565b60405180910390f35b61034d60048036038101906103489190611609565b610cf8565b005b61036960048036038101906103649190611555565b610dbc565b6040516103769190611d5d565b60405180910390f35b6103996004803603810190610394919061157e565b610dd4565b6040516103a69190611d5d565b60405180910390f35b6103c960048036038101906103c49190611555565b610e5b565b005b6103e560048036038101906103e09190611555565b610f53565b6040516103f29190611ba0565b60405180910390f35b60606003805461040a90611e8d565b80601f016020809104026020016040519081016040528092919081815260200182805461043690611e8d565b80156104835780601f1061045857610100808354040283529160200191610483565b820191906000526020600020905b81548152906001019060200180831161046657829003601f168201915b5050505050905090565b60006104a161049a610f73565b8484610f7b565b6001905092915050565b6104b3610f73565b73ffffffffffffffffffffffffffffffffffffffff166104d1610b33565b73ffffffffffffffffffffffffffffffffffffffff1614610527576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161051e90611cbd565b60405180910390fd5b81819050848490501461056f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161056690611c7d565b60405180910390fd5b60005b84849050811015610660578282828181106105b6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020135600760008787858181106105fa577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b905060200201602081019061060f9190611555565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808061065890611ebf565b915050610572565b5050505050565b6000600254905090565b600061067e848484611146565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006106c9610f73565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610749576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074090611c9d565b60405180910390fd5b61075d85610755610f73565b858403610f7b565b60019150509392505050565b60006012905090565b600061081461077f610f73565b84846001600061078d610f73565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461080f9190611daf565b610f7b565b6001905092915050565b6000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081116108a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089c90611c3d565b60405180910390fd5b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610932576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092990611cdd565b60405180910390fd5b6001600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061099c610995610b33565b3383611146565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6109ef610f73565b73ffffffffffffffffffffffffffffffffffffffff16610a0d610b33565b73ffffffffffffffffffffffffffffffffffffffff1614610a63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5a90611cbd565b60405180910390fd5b610a6d60006113c7565b565b610a77610f73565b73ffffffffffffffffffffffffffffffffffffffff16610a95610b33565b73ffffffffffffffffffffffffffffffffffffffff1614610aeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae290611cbd565b60405180910390fd5b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610b6c90611e8d565b80601f0160208091040260200160405190810160405280929190818152602001828054610b9890611e8d565b8015610be55780601f10610bba57610100808354040283529160200191610be5565b820191906000526020600020905b815481529060010190602001808311610bc857829003601f168201915b5050505050905090565b60008060016000610bfe610f73565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610cbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb290611d3d565b60405180910390fd5b610ccf610cc6610f73565b85858403610f7b565b600191505092915050565b6000610cee610ce7610f73565b8484611146565b6001905092915050565b610d00610f73565b73ffffffffffffffffffffffffffffffffffffffff16610d1e610b33565b73ffffffffffffffffffffffffffffffffffffffff1614610d74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6b90611cbd565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b60076020528060005260406000206000915090505481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610e63610f73565b73ffffffffffffffffffffffffffffffffffffffff16610e81610b33565b73ffffffffffffffffffffffffffffffffffffffff1614610ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ece90611cbd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3e90611bfd565b60405180910390fd5b610f50816113c7565b50565b60066020528060005260406000206000915054906101000a900460ff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610feb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe290611d1d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561105b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105290611c1d565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516111399190611d5d565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156111b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ad90611cfd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611226576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121d90611bdd565b60405180910390fd5b61123183838361148d565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156112b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ae90611c5d565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461134a9190611daf565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516113ae9190611d5d565b60405180910390a36113c1848484611492565b50505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b6000813590506114a681611f77565b92915050565b60008083601f8401126114be57600080fd5b8235905067ffffffffffffffff8111156114d757600080fd5b6020830191508360208202830111156114ef57600080fd5b9250929050565b60008083601f84011261150857600080fd5b8235905067ffffffffffffffff81111561152157600080fd5b60208301915083602082028301111561153957600080fd5b9250929050565b60008135905061154f81611f8e565b92915050565b60006020828403121561156757600080fd5b600061157584828501611497565b91505092915050565b6000806040838503121561159157600080fd5b600061159f85828601611497565b92505060206115b085828601611497565b9150509250929050565b6000806000606084860312156115cf57600080fd5b60006115dd86828701611497565b93505060206115ee86828701611497565b92505060406115ff86828701611540565b9150509250925092565b6000806040838503121561161c57600080fd5b600061162a85828601611497565b925050602061163b85828601611540565b9150509250929050565b6000806000806040858703121561165b57600080fd5b600085013567ffffffffffffffff81111561167557600080fd5b611681878288016114ac565b9450945050602085013567ffffffffffffffff8111156116a057600080fd5b6116ac878288016114f6565b925092505092959194509250565b6116c381611e05565b82525050565b6116d281611e17565b82525050565b60006116e382611d93565b6116ed8185611d9e565b93506116fd818560208601611e5a565b61170681611f66565b840191505092915050565b600061171e602383611d9e565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000611784602683611d9e565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006117ea602283611d9e565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000611850601883611d9e565b91507f4e6f7420656c696769626c6520666f722061697264726f7000000000000000006000830152602082019050919050565b6000611890602683611d9e565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206260008301527f616c616e636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006118f6602583611d9e565b91507f41646472657373657320616e6420616d6f756e7473206c656e677468206d697360008301527f6d617463680000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061195c602883611d9e565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206160008301527f6c6c6f77616e63650000000000000000000000000000000000000000000000006020830152604082019050919050565b60006119c2602083611d9e565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000611a02601783611d9e565b91507f41697264726f7020616c726561647920636c61696d65640000000000000000006000830152602082019050919050565b6000611a42602583611d9e565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000611aa8602483611d9e565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000611b0e602583611d9e565b91507f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008301527f207a65726f0000000000000000000000000000000000000000000000000000006020830152604082019050919050565b611b7081611e43565b82525050565b611b7f81611e4d565b82525050565b6000602082019050611b9a60008301846116ba565b92915050565b6000602082019050611bb560008301846116c9565b92915050565b60006020820190508181036000830152611bd581846116d8565b905092915050565b60006020820190508181036000830152611bf681611711565b9050919050565b60006020820190508181036000830152611c1681611777565b9050919050565b60006020820190508181036000830152611c36816117dd565b9050919050565b60006020820190508181036000830152611c5681611843565b9050919050565b60006020820190508181036000830152611c7681611883565b9050919050565b60006020820190508181036000830152611c96816118e9565b9050919050565b60006020820190508181036000830152611cb68161194f565b9050919050565b60006020820190508181036000830152611cd6816119b5565b9050919050565b60006020820190508181036000830152611cf6816119f5565b9050919050565b60006020820190508181036000830152611d1681611a35565b9050919050565b60006020820190508181036000830152611d3681611a9b565b9050919050565b60006020820190508181036000830152611d5681611b01565b9050919050565b6000602082019050611d726000830184611b67565b92915050565b6000602082019050611d8d6000830184611b76565b92915050565b600081519050919050565b600082825260208201905092915050565b6000611dba82611e43565b9150611dc583611e43565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611dfa57611df9611f08565b5b828201905092915050565b6000611e1082611e23565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b83811015611e78578082015181840152602081019050611e5d565b83811115611e87576000848401525b50505050565b60006002820490506001821680611ea557607f821691505b60208210811415611eb957611eb8611f37565b5b50919050565b6000611eca82611e43565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611efd57611efc611f08565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b611f8081611e05565b8114611f8b57600080fd5b50565b611f9781611e43565b8114611fa257600080fd5b5056fea2646970667358221220c2b7f0183b59076f590c635639ecc3ad528f6eb815dab1064f6471dace87aa3164736f6c63430008000033