60806040526a0966805415ccee9654000060005534801561001f57600080fd5b50600080543380835260016020526040808420839055519092917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9161006791815260200190565b60405180910390a3610c248061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c806342966c681161008c578063a457c2d711610066578063a457c2d714610219578063a9059cbb1461022c578063cae9ca511461023f578063dd62ed3e1461025257600080fd5b806342966c68146101bb57806370a08231146101ce57806395d89b41146101f757600080fd5b80631e89d545116100c85780631e89d5451461016657806323b872dd1461017b578063313ce5671461018e57806339509351146101a857600080fd5b806306fdde03146100ef578063095ea7b31461013157806318160ddd14610154575b600080fd5b61011b6040518060400160405280600d81526020016c4d73204620776173206865726560981b81525081565b60405161012891906107d4565b60405180910390f35b61014461013f36600461083e565b61028b565b6040519015158152602001610128565b6000545b604051908152602001610128565b61017961017436600461093e565b610306565b005b6101446101893660046109fe565b610366565b610196601281565b60405160ff9091168152602001610128565b6101446101b636600461083e565b6104b9565b6101796101c9366004610a3a565b61055d565b6101586101dc366004610a53565b6001600160a01b031660009081526001602052604090205490565b61011b6040518060400160405280600381526020016226a9a360e91b81525081565b61014461022736600461083e565b6105fb565b61014461023a36600461083e565b610643565b61014461024d366004610a75565b610700565b610158610260366004610afc565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b60006001600160a01b0383166102a057600080fd5b3360008181526002602090815260408083206001600160a01b03881680855290835292819020869055518581529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a35060015b92915050565b60005b82518110156103615761034e83828151811061032757610327610b2f565b602002602001015183838151811061034157610341610b2f565b6020026020010151610643565b508061035981610b5b565b915050610309565b505050565b6001600160a01b03831660009081526001602052604081205482111561038b57600080fd5b6001600160a01b03841660009081526002602090815260408083203384529091529020548211156103bb57600080fd5b6001600160a01b0383166103ce57600080fd5b6001600160a01b038416600090815260016020526040812080548492906103f6908490610b74565b90915550506001600160a01b03831660009081526001602052604081208054849290610423908490610b87565b90915550506001600160a01b03841660009081526002602090815260408083203384529091528120805484929061045b908490610b74565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516104a791815260200190565b60405180910390a35060019392505050565b60006001600160a01b0383166104ce57600080fd5b3360009081526002602090815260408083206001600160a01b038716845290915281208054849290610501908490610b87565b90915550503360008181526002602090815260408083206001600160a01b038816808552908352928190205490519081529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591016102f4565b8060000361056a57600080fd5b3360009081526001602052604090205481111561058657600080fd5b806000808282546105979190610b74565b909155505033600090815260016020526040812080548392906105bb908490610b74565b909155505060405181815260009033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350565b60006001600160a01b03831661061057600080fd5b3360009081526002602090815260408083206001600160a01b038716845290915281208054849290610501908490610b74565b3360009081526001602052604081205482111561065f57600080fd5b6001600160a01b03831661067257600080fd5b3360009081526001602052604081208054849290610691908490610b74565b90915550506001600160a01b038316600090815260016020526040812080548492906106be908490610b87565b90915550506040518281526001600160a01b0384169033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016102f4565b3360008181526002602090815260408083206001600160a01b038916808552925280832087905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061075b9088815260200190565b60405180910390a3604051638f4ffcb160e01b81526001600160a01b03861690638f4ffcb1906107979033908890309089908990600401610b9a565b600060405180830381600087803b1580156107b157600080fd5b505af11580156107c5573d6000803e3d6000fd5b50600198975050505050505050565b600060208083528351808285015260005b81811015610801578581018301518582016040015282016107e5565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461083957600080fd5b919050565b6000806040838503121561085157600080fd5b61085a83610822565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156108a7576108a7610868565b604052919050565b600067ffffffffffffffff8211156108c9576108c9610868565b5060051b60200190565b600082601f8301126108e457600080fd5b813560206108f96108f4836108af565b61087e565b82815260059290921b8401810191818101908684111561091857600080fd5b8286015b84811015610933578035835291830191830161091c565b509695505050505050565b6000806040838503121561095157600080fd5b823567ffffffffffffffff8082111561096957600080fd5b818501915085601f83011261097d57600080fd5b8135602061098d6108f4836108af565b82815260059290921b840181019181810190898411156109ac57600080fd5b948201945b838610156109d1576109c286610822565b825294820194908201906109b1565b965050860135925050808211156109e757600080fd5b506109f4858286016108d3565b9150509250929050565b600080600060608486031215610a1357600080fd5b610a1c84610822565b9250610a2a60208501610822565b9150604084013590509250925092565b600060208284031215610a4c57600080fd5b5035919050565b600060208284031215610a6557600080fd5b610a6e82610822565b9392505050565b60008060008060608587031215610a8b57600080fd5b610a9485610822565b935060208501359250604085013567ffffffffffffffff80821115610ab857600080fd5b818701915087601f830112610acc57600080fd5b813581811115610adb57600080fd5b886020828501011115610aed57600080fd5b95989497505060200194505050565b60008060408385031215610b0f57600080fd5b610b1883610822565b9150610b2660208401610822565b90509250929050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201610b6d57610b6d610b45565b5060010190565b8181038181111561030057610300610b45565b8082018082111561030057610300610b45565b6001600160a01b038681168252602082018690528416604082015260806060820181905281018290526000828460a0840137600060a0848401015260a0601f19601f8501168301019050969550505050505056fea2646970667358221220a7cf14aed52d171acad66b586f693d310492af32c382f8eea7d55c26b2c48dec64736f6c63430008110033