6101606040523480156200001257600080fd5b506040516200285238038062002852833981016040819052620000359162000379565b6040805180820190915260018152603160f81b60208201528490819081866003620000618382620004ac565b506004620000708282620004ac565b50620000829150839050600662000182565b610120526200009381600762000182565b61014052815160208084019190912060e052815190820120610100524660a0526200012160e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c0525062000138600033620001bb565b620001647f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a682620001bb565b50600a805460ff191660ff9290921691909117905550620005d29050565b6000602083511015620001a2576200019a8362000260565b9050620001b5565b81620001af8482620004ac565b5060ff90505b92915050565b60008281526005602090815260408083206001600160a01b038516845290915290205460ff166200025c5760008281526005602090815260408083206001600160a01b03851684529091529020805460ff191660011790556200021b3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b600080829050601f8151111562000297578260405163305a27a960e01b81526004016200028e919062000578565b60405180910390fd5b8051620002a482620005ad565b179392505050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620002df578181015183820152602001620002c5565b50506000910152565b600082601f830112620002fa57600080fd5b81516001600160401b0380821115620003175762000317620002ac565b604051601f8301601f19908116603f01168101908282118183101715620003425762000342620002ac565b816040528381528660208588010111156200035c57600080fd5b6200036f846020830160208901620002c2565b9695505050505050565b600080600080608085870312156200039057600080fd5b84516001600160401b0380821115620003a857600080fd5b620003b688838901620002e8565b95506020870151915080821115620003cd57600080fd5b50620003dc87828801620002e8565b935050604085015160ff81168114620003f457600080fd5b60608601519092506001600160a01b03811681146200041257600080fd5b939692955090935050565b600181811c908216806200043257607f821691505b6020821081036200045357634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620004a757600081815260208120601f850160051c81016020861015620004825750805b601f850160051c820191505b81811015620004a3578281556001016200048e565b5050505b505050565b81516001600160401b03811115620004c857620004c8620002ac565b620004e081620004d984546200041d565b8462000459565b602080601f831160018114620005185760008415620004ff5750858301515b600019600386901b1c1916600185901b178555620004a3565b600085815260208120601f198616915b82811015620005495788860151825594840194600190910190840162000528565b5085821015620005685787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b602081526000825180602084015262000599816040850160208701620002c2565b601f01601f19169190910160400192915050565b80516020808301519190811015620004535760001960209190910360031b1b16919050565b60805160a05160c05160e0516101005161012051610140516122256200062d60003960006107ad01526000610782015260006111c9015260006111a1015260006110fc015260006111260152600061115001526122256000f3fe608060405234801561001057600080fd5b50600436106101ae5760003560e01c806370a08231116100ee578063a217fddf11610097578063d505accf11610071578063d505accf146103bc578063d5391393146103cf578063d547741f146103f6578063dd62ed3e1461040957600080fd5b8063a217fddf1461038e578063a457c2d714610396578063a9059cbb146103a957600080fd5b806384b0196e116100c857806384b0196e1461032557806391d148541461034057806395d89b411461038657600080fd5b806370a08231146102c957806379cc6790146102ff5780637ecebe001461031257600080fd5b80632f2ff15d1161015b57806336568abe1161013557806336568abe1461027d578063395093511461029057806340c10f19146102a357806342966c68146102b657600080fd5b80632f2ff15d1461024b578063313ce567146102605780633644e5151461027557600080fd5b806318160ddd1161018c57806318160ddd1461020357806323b872dd14610215578063248a9ca31461022857600080fd5b806301ffc9a7146101b357806306fdde03146101db578063095ea7b3146101f0575b600080fd5b6101c66101c1366004611d21565b61044f565b60405190151581526020015b60405180910390f35b6101e36104e8565b6040516101d29190611dd1565b6101c66101fe366004611e0d565b61057a565b6002545b6040519081526020016101d2565b6101c6610223366004611e37565b610592565b610207610236366004611e73565b60009081526005602052604090206001015490565b61025e610259366004611e8c565b6105b6565b005b600a5460405160ff90911681526020016101d2565b6102076105e0565b61025e61028b366004611e8c565b6105ef565b6101c661029e366004611e0d565b6106a7565b61025e6102b1366004611e0d565b6106f3565b61025e6102c4366004611e73565b610727565b6102076102d7366004611eb8565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b61025e61030d366004611e0d565b610734565b610207610320366004611eb8565b610749565b61032d610774565b6040516101d29796959493929190611ed3565b6101c661034e366004611e8c565b600091825260056020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101e3610819565b610207600081565b6101c66103a4366004611e0d565b610828565b6101c66103b7366004611e0d565b6108f9565b61025e6103ca366004611f92565b610907565b6102077f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b61025e610404366004611e8c565b610ac6565b610207610417366004612005565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806104e257507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6060600380546104f79061202f565b80601f01602080910402602001604051908101604052809291908181526020018280546105239061202f565b80156105705780601f1061054557610100808354040283529160200191610570565b820191906000526020600020905b81548152906001019060200180831161055357829003601f168201915b5050505050905090565b600033610588818585610aeb565b5060019392505050565b6000336105a0858285610c9e565b6105ab858585610d75565b506001949350505050565b6000828152600560205260409020600101546105d181610fe4565b6105db8383610fee565b505050565b60006105ea6110e2565b905090565b73ffffffffffffffffffffffffffffffffffffffff81163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084015b60405180910390fd5b6106a3828261121a565b5050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061058890829086906106ee9087906120ab565b610aeb565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a661071d81610fe4565b6105db83836112d5565b61073133826113c8565b50565b61073f823383610c9e565b6106a382826113c8565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600860205260408120546104e2565b6000606080828080836107a87f0000000000000000000000000000000000000000000000000000000000000000600661158c565b6107d37f0000000000000000000000000000000000000000000000000000000000000000600761158c565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b6060600480546104f79061202f565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156108ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610690565b6105ab8286868403610aeb565b600033610588818585610d75565b83421115610971576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e650000006044820152606401610690565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886109a08c611637565b60408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506000610a088261166c565b90506000610a18828787876116b4565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610aaf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e617475726500006044820152606401610690565b610aba8a8a8a610aeb565b50505050505050505050565b600082815260056020526040902060010154610ae181610fe4565b6105db838361121a565b73ffffffffffffffffffffffffffffffffffffffff8316610b8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610690565b73ffffffffffffffffffffffffffffffffffffffff8216610c30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610690565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610d6f5781811015610d62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610690565b610d6f8484848403610aeb565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610e18576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610690565b73ffffffffffffffffffffffffffffffffffffffff8216610ebb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610690565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610f71576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610690565b73ffffffffffffffffffffffffffffffffffffffff848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610d6f565b61073181336116dc565b600082815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff166106a357600082815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff85168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556110843390565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561114857507f000000000000000000000000000000000000000000000000000000000000000046145b1561117257507f000000000000000000000000000000000000000000000000000000000000000090565b6105ea604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600082815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16156106a357600082815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b73ffffffffffffffffffffffffffffffffffffffff8216611352576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610690565b806002600082825461136491906120ab565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff821661146b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610690565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611521576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610690565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b606060ff83146115a65761159f83611796565b90506104e2565b8180546115b29061202f565b80601f01602080910402602001604051908101604052809291908181526020018280546115de9061202f565b801561162b5780601f106116005761010080835404028352916020019161162b565b820191906000526020600020905b81548152906001019060200180831161160e57829003601f168201915b505050505090506104e2565b73ffffffffffffffffffffffffffffffffffffffff811660009081526008602052604090208054600181018255905b50919050565b60006104e26116796110e2565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b60008060006116c5878787876117d5565b915091506116d2816118c4565b5095945050505050565b600082815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff166106a35761171c81611a77565b611727836020611a96565b6040516020016117389291906120ed565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261069091600401611dd1565b606060006117a383611ce0565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561180c57506000905060036118bb565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611860573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166118b4576000600192509250506118bb565b9150600090505b94509492505050565b60008160048111156118d8576118d861216e565b036118e05750565b60018160048111156118f4576118f461216e565b0361195b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610690565b600281600481111561196f5761196f61216e565b036119d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610690565b60038160048111156119ea576119ea61216e565b03610731576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401610690565b60606104e273ffffffffffffffffffffffffffffffffffffffff831660145b60606000611aa583600261219d565b611ab09060026120ab565b67ffffffffffffffff811115611ac857611ac86120be565b6040519080825280601f01601f191660200182016040528015611af2576020820181803683370190505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110611b2957611b296121b4565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110611b8c57611b8c6121b4565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000611bc884600261219d565b611bd39060016120ab565b90505b6001811115611c70577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110611c1457611c146121b4565b1a60f81b828281518110611c2a57611c2a6121b4565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c93611c69816121e3565b9050611bd6565b508315611cd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610690565b9392505050565b600060ff8216601f8111156104e2576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215611d3357600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611cd957600080fd5b60005b83811015611d7e578181015183820152602001611d66565b50506000910152565b60008151808452611d9f816020860160208601611d63565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611cd96020830184611d87565b803573ffffffffffffffffffffffffffffffffffffffff81168114611e0857600080fd5b919050565b60008060408385031215611e2057600080fd5b611e2983611de4565b946020939093013593505050565b600080600060608486031215611e4c57600080fd5b611e5584611de4565b9250611e6360208501611de4565b9150604084013590509250925092565b600060208284031215611e8557600080fd5b5035919050565b60008060408385031215611e9f57600080fd5b82359150611eaf60208401611de4565b90509250929050565b600060208284031215611eca57600080fd5b611cd982611de4565b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e081840152611f0f60e084018a611d87565b8381036040850152611f21818a611d87565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c0860152855180825283870192509083019060005b81811015611f8057835183529284019291840191600101611f64565b50909c9b505050505050505050505050565b600080600080600080600060e0888a031215611fad57600080fd5b611fb688611de4565b9650611fc460208901611de4565b95506040880135945060608801359350608088013560ff81168114611fe857600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561201857600080fd5b61202183611de4565b9150611eaf60208401611de4565b600181811c9082168061204357607f821691505b602082108103611666577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156104e2576104e261207c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351612125816017850160208801611d63565b7f206973206d697373696e6720726f6c65200000000000000000000000000000006017918401918201528351612162816028840160208801611d63565b01602801949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b80820281158282048414176104e2576104e261207c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000816121f2576121f261207c565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019056fea164736f6c6343000815000a000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000233d5bde3cf06e96e936c6d775968fa375c2c88f000000000000000000000000000000000000000000000000000000000000000c5465737420546f6b656e2036000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035454320000000000000000000000000000000000000000000000000000000000