60a06040523480156200001157600080fd5b5060408051808201825260168082527f546f6b656e5f4469766964656e645f547261636b65720000000000000000000060208084018290528451808601909552918452908301529081816003620000698382620001ab565b506004620000788282620001ab565b505050620000956200008f620000b060201b60201c565b620000b4565b5050610e1060155568056bc75e2d6310000060805262000277565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200013157607f821691505b6020821081036200015257634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001a657600081815260208120601f850160051c81016020861015620001815750805b601f850160051c820191505b81811015620001a2578281556001016200018d565b5050505b505050565b81516001600160401b03811115620001c757620001c762000106565b620001df81620001d884546200011c565b8462000158565b602080601f831160018114620002175760008415620001fe5750858301515b600019600386901b1c1916600185901b178555620001a2565b600085815260208120601f198616915b82811015620002485788860151825594840194600190910190840162000227565b5085821015620002675787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6080516121176200029a6000396000818161055d0152610cd701526121176000f3fe608060405234801561001057600080fd5b50600436106102695760003560e01c806380b0226411610151578063be10b614116100c3578063e98030c711610087578063e98030c7146105c0578063ecbfcbee146105d3578063f2fde38b146105e6578063fbcbc0f1146105f9578063fe96fbcb1461060c578063ffb2c4791461061f57600080fd5b8063be10b61414610558578063cf9193de1461057f578063dd62ed3e14610592578063e30443bc146105a5578063e7841ec0146105b857600080fd5b8063a457c2d711610115578063a457c2d7146104f0578063a5c6063a14610503578063a9059cbb1461050c578063b24b08341461051f578063bc2efdb714610532578063bc4c4b371461054557600080fd5b806380b02264146104a95780638da5cb5b146104c45780638e312234146104d557806393d089771461046e57806395d89b41146104e857600080fd5b806339509351116101ea5780636b93fdd3116101ae5780636b93fdd3146104215780636f2789ec1461043457806370a082311461043d578063715018a61461046657806373afae271461046e57806374e4c7131461047657600080fd5b806339509351146103525780634e7b827f146103655780635183d6fd146103885780635ccc30da146103ef578063662325bf1461041857600080fd5b8063226cfa3d11610231578063226cfa3d146102f257806323b872dd146103125780633009a60914610325578063313ce5671461032e57806331e79db01461033d57600080fd5b806306fdde031461026e578063095ea7b31461028c57806309bbedde146102af57806313b24493146102c157806318160ddd146102ea575b600080fd5b61027661064d565b6040516102839190611deb565b60405180910390f35b61029f61029a366004611e4e565b6106df565b6040519015158152602001610283565b600e545b604051908152602001610283565b6102b36102cf366004611e7a565b6001600160a01b03166000908152600b602052604090205490565b6002546102b3565b6102b3610300366004611e7a565b60146020526000908152604090205481565b61029f610320366004611e97565b6106f9565b6102b360125481565b60405160128152602001610283565b61035061034b366004611e7a565b61071d565b005b61029f610360366004611e4e565b6107bb565b61029f610373366004611e7a565b60136020526000908152604090205460ff1681565b61039b610396366004611ed8565b6107dd565b604080516001600160a01b03909b168b5260208b0199909952978901969096526060880194909452608087019290925260a086015260c085015260e084015261010083015261012082015261014001610283565b6102b36103fd366004611e7a565b6001600160a01b03166000908152600a602052604090205490565b6102b3600d5481565b6102b361042f366004611e7a565b61085b565b6102b360155481565b6102b361044b366004611e7a565b6001600160a01b031660009081526020819052604090205490565b610350610887565b61035061089b565b61049173184ff13b3ebcb25be44e860163a5d8391dd568c181565b6040516001600160a01b039091168152602001610283565b61049173420fca0121dc28039145009570975747295f232981565b6005546001600160a01b0316610491565b6102b36104e3366004611e7a565b610944565b61027661096a565b61029f6104fe366004611e4e565b610979565b6102b3600c5481565b61029f61051a366004611e4e565b6109f4565b6102b361052d366004611e7a565b610a02565b610350610540366004611ef1565b610a0d565b61029f610553366004611f21565b610b7e565b6102b37f000000000000000000000000000000000000000000000000000000000000000081565b6102b361058d366004611e7a565b610c26565b6102b36105a0366004611f5a565b610c82565b6103506105b3366004611e4e565b610cad565b6012546102b3565b6103506105ce366004611ed8565b610d3d565b6102b36105e1366004611e7a565b610e8a565b6103506105f4366004611e7a565b610e95565b61039b610607366004611e7a565b610f0e565b6102b361061a366004611e7a565b611011565b61063261062d366004611ed8565b611053565b60408051938452602084019290925290820152606001610283565b60606003805461065c90611f88565b80601f016020809104026020016040519081016040528092919081815260200182805461068890611f88565b80156106d55780601f106106aa576101008083540402835291602001916106d5565b820191906000526020600020905b8154815290600101906020018083116106b857829003601f168201915b5050505050905090565b6000336106ed818585611170565b60019150505b92915050565b600033610707858285611294565b61071285858561130e565b506001949350505050565b61072561136b565b6001600160a01b03811660009081526013602052604090205460ff161561074b57600080fd5b6001600160a01b0381166000908152601360205260408120805460ff191660011790556107799082906113c5565b610784600e8261141e565b6040516001600160a01b038216907fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b2590600090a250565b6000336106ed8185856107ce8383610c82565b6107d89190611fd8565b611170565b6000806000806000806000806000806107f5600e5490565b8b1061082057506000985060001997508796508895508594508493508392508291508190508061084e565b600061082d600e8d611559565b905061083881610f0e565b9a509a509a509a509a509a509a509a509a509a50505b9193959799509193959799565b6001600160a01b0381166000908152600a60205260408120546106f39061088184611011565b9061158c565b61088f61136b565b610899600061159f565b565b60405162461bcd60e51b815260206004820152606760248201527f546f6b656e5f4469766964656e645f547261636b65723a20776974686472617760448201527f4469766964656e642064697361626c65642e20557365207468652027636c616960648201527f6d272066756e6374696f6e206f6e20746865206d61696e20546f6b656e20636f608482015266373a3930b1ba1760c91b60a482015260c4015b60405180910390fd5b6001600160a01b0381166000908152600b60205260408120546106f39061088184610c26565b60606004805461065c90611f88565b600033816109878286610c82565b9050838110156109e75760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161093b565b6107128286868403611170565b6000336106ed81858561130e565b60006106f382610944565b610a1561136b565b6000610a2060025490565b11610a565760405162461bcd60e51b815260040161093b906020808252600490820152634e6f6e6560e01b604082015260600190565b8115610ae857610a89610a6860025490565b610a7684600160801b6115f1565b610a809190611feb565b600654906115fd565b60065560405182815273420fca0121dc28039145009570975747295f23299033907fed3d2bb074fd9508222d5c4e01d3b7fff76f6f44130bf245345e2af9974356749060200160405180910390a3600c54610ae490836115fd565b600c555b8015610b7a57610b1b610afa60025490565b610b0883600160801b6115f1565b610b129190611feb565b600754906115fd565b60075560405181815273184ff13b3ebcb25be44e860163a5d8391dd568c19033907fed3d2bb074fd9508222d5c4e01d3b7fff76f6f44130bf245345e2af9974356749060200160405180910390a3600d54610b7690826115fd565b600d555b5050565b6000610b8861136b565b6000610b9384611609565b90506000610ba08561178c565b90506000821180610bb15750600081115b15610c1b576001600160a01b038516600081815260146020908152604091829020429055815185815290810184905286151592917fad82e4ded87b4f1d117a62956445ec6ff411c4f2eb80134db1573f8cb74b86e7910160405180910390a36001925050506106f3565b506000949350505050565b6001600160a01b03811660009081526009602090815260408083205491839052822054600754600160801b92610c7892610c7392610c6d91610c6891906115f1565b6118ff565b9061190f565b61194d565b6106f39190611feb565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610cb561136b565b6001600160a01b03821660009081526013602052604090205460ff16610b7a577f00000000000000000000000000000000000000000000000000000000000000008110610d1757610d0682826113c5565b610d12600e8383611960565b610d2d565b610d228260006113c5565b610d2d600e8361141e565b610d38826001610b7e565b505050565b610d4561136b565b610e108110158015610d5a5750620151808111155b610de05760405162461bcd60e51b815260206004820152604b60248201527f546f6b656e5f4469766964656e645f547261636b65723a20636c61696d57616960448201527f74206d757374206265207570646174656420746f206265747765656e2031206160648201526a6e6420323420686f75727360a81b608482015260a40161093b565b6015548103610e575760405162461bcd60e51b815260206004820152603d60248201527f546f6b656e5f4469766964656e645f547261636b65723a2043616e6e6f74207560448201527f706461746520636c61696d5761697420746f2073616d652076616c7565000000606482015260840161093b565b60155460405182907f474ea64804364a1e29a4487ddb63c3342a2dd826ccd8acf48825e680a0e6f20f90600090a3601555565b60006106f38261085b565b610e9d61136b565b6001600160a01b038116610f025760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161093b565b610f0b8161159f565b50565b8060008080808080808080610f24600e8b611a09565b9850600019975060008912610f8657601254891115610f5257601254610f4b908a90611a54565b9750610f86565b601254600e5460009110610f67576000610f76565b601254600e54610f769161158c565b9050610f828a8261190f565b9850505b610f8f8a61085b565b9650610f9a8a611011565b9550610fa58a610944565b9450610fb08a610c26565b6001600160a01b038b16600090815260146020526040902054909450925082610fda576000610fe8565b601554610fe89084906115fd565b9150428211610ff8576000611002565b611002824261158c565b90509193959799509193959799565b6001600160a01b03811660009081526008602090815260408083205491839052822054600654600160801b92610c7892610c7392610c6d91610c6891906115f1565b600e546000908190819080820361107557505060125460009250829150611169565b6012546000805a90506000805b898410801561109057508582105b15611158578461109f8161200d565b600e54909650861090506110b257600094505b6000600e60000186815481106110ca576110ca612026565b60009182526020808320909101546001600160a01b031680835260149091526040909120549091506110fb90611a91565b1561111e5761110b816001610b7e565b1561111e578161111a8161200d565b9250505b826111288161200d565b93505060005a90508085111561114f5761114c611145868361158c565b87906115fd565b95505b93506110829050565b601285905590975095509193505050505b9193909250565b6001600160a01b0383166111d25760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161093b565b6001600160a01b0382166112335760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161093b565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006112a08484610c82565b9050600019811461130857818110156112fb5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161093b565b6113088484848403611170565b50505050565b60405162461bcd60e51b815260206004820152602c60248201527f546f6b656e5f4469766964656e645f547261636b65723a204e6f207472616e7360448201526b19995c9cc8185b1b1bddd95960a21b606482015260840161093b565b6005546001600160a01b031633146108995760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161093b565b6001600160a01b038216600090815260208190526040902054808211156113fe5760006113f2838361158c565b90506113088482611ab8565b80821015610d38576000611412828461158c565b90506113088482611b69565b6001600160a01b038116600090815260038301602052604090205460ff16611444575050565b6001600160a01b03811660009081526003830160209081526040808320805460ff191690556001808601835281842084905560028601909252822054845490929161148e9161203c565b905060008460000182815481106114a7576114a7612026565b60009182526020808320909101546001600160a01b039081168084526002890190925260408084208790559087168352822091909155855490915081908690859081106114f6576114f6612026565b600091825260209091200180546001600160a01b0319166001600160a01b039290921691909117905584548590806115305761153061204f565b600082815260209020810160001990810180546001600160a01b03191690550190555050505050565b600082600001828154811061157057611570612026565b6000918252602090912001546001600160a01b03169392505050565b6000611598828461203c565b9392505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006115988284612065565b60006115988284611fd8565b6000806116158361085b565b90508015611783576001600160a01b0383166000908152600a602052604090205461164090826115fd565b6001600160a01b0384166000818152600a6020908152604091829020939093555183815273420fca0121dc28039145009570975747295f2329927f98ac917b3f7ecc0d3809f54fde7c0a493c376774dce018d93640a7574313ee77910160405180910390a360405163a9059cbb60e01b81526001600160a01b03841660048201526024810182905260009073420fca0121dc28039145009570975747295f23299063a9059cbb906044016020604051808303816000875af1158015611709573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172d919061207c565b90508061177c576001600160a01b0384166000908152600a6020526040902054611757908361158c565b6001600160a01b039094166000908152600a6020526040812094909455509192915050565b5092915050565b50600092915050565b60008061179883610944565b90508015611783576001600160a01b0383166000908152600b60205260409020546117c390826115fd565b6001600160a01b0384166000818152600b6020908152604091829020939093555183815273184ff13b3ebcb25be44e860163a5d8391dd568c1927f98ac917b3f7ecc0d3809f54fde7c0a493c376774dce018d93640a7574313ee77910160405180910390a360405163a9059cbb60e01b81526001600160a01b03841660048201526024810182905260009073184ff13b3ebcb25be44e860163a5d8391dd568c19063a9059cbb906044016020604051808303816000875af115801561188c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118b0919061207c565b90508061177c576001600160a01b0384166000908152600b60205260409020546118da908361158c565b6001600160a01b039094166000908152600b6020526040812094909455509192915050565b600081818112156106f357600080fd5b60008061191c8385612099565b90506000831215801561192f5750838112155b80611944575060008312801561194457508381125b61159857600080fd5b60008082121561195c57600080fd5b5090565b6001600160a01b038216600090815260038401602052604090205460ff16156119a5576001600160a01b03821660009081526001840160205260409020819055505050565b6001600160a01b03821660008181526003850160209081526040808320805460ff19166001908117909155878101835281842086905587546002890184529184208290558101875586835291200180546001600160a01b0319169091179055505050565b6001600160a01b038116600090815260038301602052604081205460ff16611a3457506000196106f3565b506001600160a01b03166000908152600291909101602052604090205490565b600080611a6183856120c1565b905060008312158015611a745750838113155b806119445750600083128015611944575083811361159857600080fd5b600042821115611aa357506000919050565b601554611ab0428461158c565b101592915050565b611ac28282611bfa565b611afc611add610c68836006546115f190919063ffffffff16565b6001600160a01b03841660009081526008602052604090205490611a54565b6001600160a01b038316600090815260086020526040902055600754611b4990611b2a90610c6890846115f1565b6001600160a01b03841660009081526009602052604090205490611a54565b6001600160a01b0390921660009081526009602052604090209190915550565b611b738282611cb9565b611bad611b8e610c68836006546115f190919063ffffffff16565b6001600160a01b0384166000908152600860205260409020549061190f565b6001600160a01b038316600090815260086020526040902055600754611b4990611bdb90610c6890846115f1565b6001600160a01b0384166000908152600960205260409020549061190f565b6001600160a01b038216611c505760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161093b565b8060026000828254611c629190611fd8565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216611d195760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161093b565b6001600160a01b03821660009081526020819052604090205481811015611d8d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161093b565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b600060208083528351808285015260005b81811015611e1857858101830151858201604001528201611dfc565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610f0b57600080fd5b60008060408385031215611e6157600080fd5b8235611e6c81611e39565b946020939093013593505050565b600060208284031215611e8c57600080fd5b813561159881611e39565b600080600060608486031215611eac57600080fd5b8335611eb781611e39565b92506020840135611ec781611e39565b929592945050506040919091013590565b600060208284031215611eea57600080fd5b5035919050565b60008060408385031215611f0457600080fd5b50508035926020909101359150565b8015158114610f0b57600080fd5b60008060408385031215611f3457600080fd5b8235611f3f81611e39565b91506020830135611f4f81611f13565b809150509250929050565b60008060408385031215611f6d57600080fd5b8235611f7881611e39565b91506020830135611f4f81611e39565b600181811c90821680611f9c57607f821691505b602082108103611fbc57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b808201808211156106f3576106f3611fc2565b60008261200857634e487b7160e01b600052601260045260246000fd5b500490565b60006001820161201f5761201f611fc2565b5060010190565b634e487b7160e01b600052603260045260246000fd5b818103818111156106f3576106f3611fc2565b634e487b7160e01b600052603160045260246000fd5b80820281158282048414176106f3576106f3611fc2565b60006020828403121561208e57600080fd5b815161159881611f13565b80820182811260008312801582168215821617156120b9576120b9611fc2565b505092915050565b818103600083128015838313168383128216171561177c5761177c611fc256fea2646970667358221220dde70d888d59f7d0f6d1d79b1fcce606c451acd34ea54d40a33d9788f8ae796d64736f6c63430008130033