60806040523480156200001157600080fd5b506040518060400160405280600a815260200169048656c6c6f45524332360b41b8152506040518060400160405280600581526020016448454c4c4f60d81b815250816003908162000064919062000216565b50600462000073828262000216565b5050600880546001600160a01b03191633908117909155620000a1915069d3c21bcecceda1000000620000a7565b6200030a565b6001600160a01b038216620001025760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b8060026000828254620001169190620002e2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200019d57607f821691505b602082108103620001be57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200016d57600081815260208120601f850160051c81016020861015620001ed5750805b601f850160051c820191505b818110156200020e57828155600101620001f9565b505050505050565b81516001600160401b0381111562000232576200023262000172565b6200024a8162000243845462000188565b84620001c4565b602080601f831160018114620002825760008415620002695750858301515b600019600386901b1c1916600185901b1785556200020e565b600085815260208120601f198616915b82811015620002b35788860151825594840194600190910190840162000292565b5085821015620002d25787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b808201808211156200030457634e487b7160e01b600052601160045260246000fd5b92915050565b612096806200031a6000396000f3fe6080604052600436106101735760003560e01c806370a08231116100c8578063a457c2d711610084578063b479a96111610061578063b479a96114610485578063c60853f6146104a5578063dd62ed3e146104c5578063e47ad74d146104e557005b8063a457c2d714610425578063a9059cbb14610445578063b29a81401461046557005b806370a082311461034a57806373717b081461038057806379cc6790146103a0578063853c75d8146103c057806392ae12fd146103e057806395d89b411461041057005b80632f820a5f1161012f57806342966c681161010c57806342966c68146102ca5780634f23b069146102ea578063559b2f651461030a5780635f46e7401461032a57005b80632f820a5f1461026e578063313ce5671461028e57806339509351146102aa57005b806306fdde031461017c578063095ea7b3146101a75780630d029802146101d757806318160ddd1461020f57806323b872dd1461022e5780632ee02d7c1461024e57005b3661017a57005b005b34801561018857600080fd5b50610191610505565b60405161019e9190611984565b60405180910390f35b3480156101b357600080fd5b506101c76101c23660046119b3565b610597565b604051901515815260200161019e565b3480156101e357600080fd5b506005546101f7906001600160a01b031681565b6040516001600160a01b03909116815260200161019e565b34801561021b57600080fd5b506002545b60405190815260200161019e565b34801561023a57600080fd5b506101c76102493660046119df565b6105b1565b34801561025a57600080fd5b5061017a610269366004611a6c565b6105d5565b34801561027a57600080fd5b5061017a610289366004611b19565b6109f7565b34801561029a57600080fd5b506040516012815260200161019e565b3480156102b657600080fd5b506101c76102c53660046119b3565b610ab8565b3480156102d657600080fd5b5061017a6102e5366004611b40565b610ada565b3480156102f657600080fd5b5061017a610305366004611b59565b610ae7565b34801561031657600080fd5b5061017a610325366004611bf3565b610c46565b34801561033657600080fd5b5061017a610345366004611c10565b610ccc565b34801561035657600080fd5b50610220610365366004611bf3565b6001600160a01b031660009081526020819052604090205490565b34801561038c57600080fd5b506006546101f7906001600160a01b031681565b3480156103ac57600080fd5b5061017a6103bb3660046119b3565b610d5d565b3480156103cc57600080fd5b506008546101f7906001600160a01b031681565b3480156103ec57600080fd5b506104006103fb366004611b40565b610d76565b60405161019e9493929190611cc5565b34801561041c57600080fd5b50610191610e3b565b34801561043157600080fd5b506101c76104403660046119b3565b610e4a565b34801561045157600080fd5b506101c76104603660046119b3565b610ec5565b34801561047157600080fd5b5061017a6104803660046119b3565b610ed3565b34801561049157600080fd5b5061017a6104a0366004611b40565b610ffe565b3480156104b157600080fd5b5061017a6104c0366004611bf3565b6110bd565b3480156104d157600080fd5b506102206104e0366004611d05565b611185565b3480156104f157600080fd5b5061017a610500366004611b40565b6111b0565b60606003805461051490611d3e565b80601f016020809104026020016040519081016040528092919081815260200182805461054090611d3e565b801561058d5780601f106105625761010080835404028352916020019161058d565b820191906000526020600020905b81548152906001019060200180831161057057829003601f168201915b5050505050905090565b6000336105a581858561126f565b60019150505b92915050565b6000336105bf858285611394565b6105ca85858561140e565b506001949350505050565b6008546001600160a01b031633146106085760405162461bcd60e51b81526004016105ff90611d78565b60405180910390fd5b600580546001600160a01b0319166001600160a01b0389169081179091556040805163647846a560e01b8152905163647846a5916004808201926020929091908290030181865afa158015610661573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106859190611daf565b600680546001600160a01b0319166001600160a01b03929092169190911790558460005b818110156107f3578383828181106106c3576106c3611dcc565b90506020020160208101906106d89190611de2565b600760008a8a858181106106ee576106ee611dcc565b90506020020135815260200190815260200160002060020160006101000a81548161ffff021916908361ffff16021790555085858281811061073257610732611dcc565b90506020020160208101906107479190611bf3565b600760008a8a8581811061075d5761075d611dcc565b90506020020135815260200190815260200160002060000160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506000600760008a8a858181106107b1576107b1611dcc565b90506020020135815260200190815260200160002060020160026101000a81548160ff02191690831515021790555080806107eb90611e1c565b9150506106a9565b506006546001600160a01b0316156108815760065460055460405163095ea7b360e01b81526001600160a01b039182166004820152600019602482015291169063095ea7b3906044016020604051808303816000875af115801561085b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061087f9190611e35565b505b60055460408051633fc8cef360e01b815290516000926001600160a01b031691633fc8cef39160048083019260209291908290030181865afa1580156108cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ef9190611daf565b6001600160a01b0316146109ed57600560009054906101000a90046001600160a01b03166001600160a01b0316633fc8cef36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610950573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109749190611daf565b60055460405163095ea7b360e01b81526001600160a01b039182166004820152600019602482015291169063095ea7b3906044016020604051808303816000875af11580156109c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109eb9190611e35565b505b5050505050505050565b60008381526007602052604090205483906001600160a01b0316610a715760405162461bcd60e51b815260206004820152602b60248201527f4d657373616765436c69656e743a2064657374696e6174696f6e20636861696e60448201526a206e6f742061637469766560a81b60648201526084016105ff565b610a7b33836115b2565b604080516001600160a01b0385166020820152908101839052610ab19085906060016040516020818303038152906040526116e1565b5050505050565b6000336105a5818585610acb8383611185565b610ad59190611e57565b61126f565b610ae433826115b2565b50565b6008546001600160a01b03163314610b115760405162461bcd60e51b81526004016105ff90611d78565b8460005b818110156109ed57838382818110610b2f57610b2f611dcc565b9050602002016020810190610b449190611de2565b600760008a8a85818110610b5a57610b5a611dcc565b90506020020135815260200190815260200160002060020160006101000a81548161ffff021916908361ffff160217905550858582818110610b9e57610b9e611dcc565b9050602002810190610bb09190611e6a565b600760008b8b86818110610bc657610bc6611dcc565b9050602002013581526020019081526020016000206001019182610beb929190611f15565b506001600760008a8a85818110610c0457610c04611dcc565b90506020020135815260200190815260200160002060020160026101000a81548160ff0219169083151502179055508080610c3e90611e1c565b915050610b15565b6008546001600160a01b03163314610c705760405162461bcd60e51b81526004016105ff90611d78565b600880546001600160a01b0319166001600160a01b0383169081179091556040805133815260208101929092527fe1a25f463c6504824e91268b5b2c05658d5358c9c1698a85346cfae5336a642e91015b60405180910390a150565b600554859087906001600160a01b03163314610cfa5760405162461bcd60e51b81526004016105ff90611d78565b6000818152600760205260409020546001600160a01b03838116911614610d335760405162461bcd60e51b81526004016105ff90611d78565b600080610d42858701876119b3565b91509150610d50828261187f565b5050505050505050505050565b610d68823383611394565b610d7282826115b2565b5050565b600760205260009081526040902080546001820180546001600160a01b039092169291610da290611d3e565b80601f0160208091040260200160405190810160405280929190818152602001828054610dce90611d3e565b8015610e1b5780601f10610df057610100808354040283529160200191610e1b565b820191906000526020600020905b815481529060010190602001808311610dfe57829003601f168201915b5050506002909301549192505061ffff81169060ff620100009091041684565b60606004805461051490611d3e565b60003381610e588286611185565b905083811015610eb85760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016105ff565b6105ca828686840361126f565b6000336105a581858561140e565b6008546001600160a01b03163314610efd5760405162461bcd60e51b81526004016105ff90611d78565b6001600160a01b038216610f3e57604051339082156108fc029083906000818181858888f19350505050158015610f38573d6000803e3d6000fd5b50610fb1565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015610f8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610faf9190611e35565b505b604080513381526001600160a01b03841660208201529081018290527f16a1412f01b73c390eb2548427101644aa86c1443c272f73df00fb74c48fe4999060600160405180910390a15050565b6008546001600160a01b031633146110285760405162461bcd60e51b81526004016105ff90611d78565b60055460405163b479a96160e01b8152600481018390526001600160a01b039091169063b479a96190602401600060405180830381600087803b15801561106e57600080fd5b505af1158015611082573d6000803e3d6000fd5b505060408051338152602081018590527f7b6bdf5a54b984bdb41e777eb126123085d57633ab56d408d9a1d39dd894e7bb9350019050610cc1565b6008546001600160a01b031633146110e75760405162461bcd60e51b81526004016105ff90611d78565b60055460405163630429fb60e11b81526001600160a01b0383811660048301529091169063c60853f690602401600060405180830381600087803b15801561112e57600080fd5b505af1158015611142573d6000803e3d6000fd5b5050604080513381526001600160a01b03851660208201527f3785abad972484d82ebc033d8eb190737cd209b24e7f853dd622e415c3f537a29350019050610cc1565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6008546001600160a01b031633146111da5760405162461bcd60e51b81526004016105ff90611d78565b60055460405163e47ad74d60e01b8152600481018390526001600160a01b039091169063e47ad74d90602401600060405180830381600087803b15801561122057600080fd5b505af1158015611234573d6000803e3d6000fd5b505060408051338152602081018590527f83f76efc0c025b2e3779f7bcead5a89ddaf05dc7829157cdab021a8591e7a6f99350019050610cc1565b6001600160a01b0383166112d15760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016105ff565b6001600160a01b0382166113325760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016105ff565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60006113a08484611185565b9050600019811461140857818110156113fb5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016105ff565b611408848484840361126f565b50505050565b6001600160a01b0383166114725760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016105ff565b6001600160a01b0382166114d45760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016105ff565b6001600160a01b0383166000908152602081905260409020548181101561154c5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016105ff565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3611408565b6001600160a01b0382166116125760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016105ff565b6001600160a01b038216600090815260208190526040902054818110156116865760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016105ff565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611387565b505050565b600082815260076020908152604080832081516080810190925280546001600160a01b0316825260018101805485948401919061171d90611d3e565b80601f016020809104026020016040519081016040528092919081815260200182805461174990611d3e565b80156117965780601f1061176b57610100808354040283529160200191611796565b820191906000526020600020905b81548152906001019060200180831161177957829003601f168201915b50505091835250506002919091015461ffff8116602083015262010000900460ff1615156040909101526060810151909150156117f6578281602001516040516020016117e4929190611fd5565b60405160208183030381529060405292505b60055481516040808401519051633f6b724360e21b81526001600160a01b039093169263fdadc90c9261183492909189918991600090600401612003565b6020604051808303816000875af1158015611853573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118779190612047565b949350505050565b6001600160a01b0382166118d55760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016105ff565b80600260008282546118e79190611e57565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6000815180845260005b8181101561196457602081850181015186830182015201611948565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000611997602083018461193e565b9392505050565b6001600160a01b0381168114610ae457600080fd5b600080604083850312156119c657600080fd5b82356119d18161199e565b946020939093013593505050565b6000806000606084860312156119f457600080fd5b83356119ff8161199e565b92506020840135611a0f8161199e565b929592945050506040919091013590565b60008083601f840112611a3257600080fd5b50813567ffffffffffffffff811115611a4a57600080fd5b6020830191508360208260051b8501011115611a6557600080fd5b9250929050565b60008060008060008060006080888a031215611a8757600080fd5b8735611a928161199e565b9650602088013567ffffffffffffffff80821115611aaf57600080fd5b611abb8b838c01611a20565b909850965060408a0135915080821115611ad457600080fd5b611ae08b838c01611a20565b909650945060608a0135915080821115611af957600080fd5b50611b068a828b01611a20565b989b979a50959850939692959293505050565b600080600060608486031215611b2e57600080fd5b833592506020840135611a0f8161199e565b600060208284031215611b5257600080fd5b5035919050565b60008060008060008060608789031215611b7257600080fd5b863567ffffffffffffffff80821115611b8a57600080fd5b611b968a838b01611a20565b90985096506020890135915080821115611baf57600080fd5b611bbb8a838b01611a20565b90965094506040890135915080821115611bd457600080fd5b50611be189828a01611a20565b979a9699509497509295939492505050565b600060208284031215611c0557600080fd5b81356119978161199e565b600080600080600080600060c0888a031215611c2b57600080fd5b87359650602088013595506040880135611c448161199e565b94506060880135611c548161199e565b93506080880135925060a088013567ffffffffffffffff80821115611c7857600080fd5b818a0191508a601f830112611c8c57600080fd5b813581811115611c9b57600080fd5b8b6020828501011115611cad57600080fd5b60208301945080935050505092959891949750929550565b6001600160a01b0385168152608060208201819052600090611ce99083018661193e565b61ffff9490941660408301525090151560609091015292915050565b60008060408385031215611d1857600080fd5b8235611d238161199e565b91506020830135611d338161199e565b809150509250929050565b600181811c90821680611d5257607f821691505b602082108103611d7257634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252601d908201527f4d657373616765436c69656e743a206e6f7420617574686f72697a6564000000604082015260600190565b600060208284031215611dc157600080fd5b81516119978161199e565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611df457600080fd5b813561ffff8116811461199757600080fd5b634e487b7160e01b600052601160045260246000fd5b600060018201611e2e57611e2e611e06565b5060010190565b600060208284031215611e4757600080fd5b8151801515811461199757600080fd5b808201808211156105ab576105ab611e06565b6000808335601e19843603018112611e8157600080fd5b83018035915067ffffffffffffffff821115611e9c57600080fd5b602001915036819003821315611a6557600080fd5b634e487b7160e01b600052604160045260246000fd5b601f8211156116dc57600081815260208120601f850160051c81016020861015611eee5750805b601f850160051c820191505b81811015611f0d57828155600101611efa565b505050505050565b67ffffffffffffffff831115611f2d57611f2d611eb1565b611f4183611f3b8354611d3e565b83611ec7565b6000601f841160018114611f755760008515611f5d5750838201355b600019600387901b1c1916600186901b178355610ab1565b600083815260209020601f19861690835b82811015611fa65786850135825560209485019460019092019101611f86565b5086821015611fc35760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b604081526000611fe8604083018561193e565b8281036020840152611ffa818561193e565b95945050505050565b60018060a01b038616815284602082015260a06040820152600061202a60a083018661193e565b61ffff949094166060830152509015156080909101529392505050565b60006020828403121561205957600080fd5b505191905056fea2646970667358221220f6fcde36dfeb10bb814e90c7fc34205b93e3d0f725bdce7f19fbbc17f71e16ef64736f6c63430008110033