0x60806040523480156200001157600080fd5b506040518060400160405280600481526020017f544f544f000000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f544f544f00000000000000000000000000000000000000000000000000000000815250816000908051906020019062000096929190620000b8565b508060019080519060200190620000af929190620000b8565b505050620001cd565b828054620000c69062000168565b90600052602060002090601f016020900481019282620000ea576000855562000136565b82601f106200010557805160ff191683800117855562000136565b8280016001018555821562000136579182015b828111156200013557825182559160200191906001019062000118565b5b50905062000145919062000149565b5090565b5b80821115620001645760008160009055506001016200014a565b5090565b600060028204905060018216806200018157607f821691505b602082108114156200019857620001976200019e565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61272380620001dd6000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c80636352211e1161008c578063a22cb46511610066578063a22cb4651461025b578063b88d4fde14610277578063c87b56dd14610293578063e985e9c5146102c3576100ea565b80636352211e146101dd57806370a082311461020d57806395d89b411461023d576100ea565b8063095ea7b3116100c8578063095ea7b31461016d57806317e5883c1461018957806323b872dd146101a557806342842e0e146101c1576100ea565b806301ffc9a7146100ef57806306fdde031461011f578063081812fc1461013d575b600080fd5b61010960048036038101906101049190611993565b6102f3565b60405161011691906120cb565b60405180910390f35b6101276103d5565b60405161013491906120e6565b60405180910390f35b610157600480360381019061015291906119e5565b610467565b6040516101649190612064565b60405180910390f35b61018760048036038101906101829190611957565b6104ec565b005b6101a3600480360381019061019e91906117ec565b610604565b005b6101bf60048036038101906101ba9190611851565b610676565b005b6101db60048036038101906101d69190611851565b6106d6565b005b6101f760048036038101906101f291906119e5565b6106f6565b6040516102049190612064565b60405180910390f35b610227600480360381019061022291906117ec565b6107a8565b60405161023491906122e8565b60405180910390f35b610245610860565b60405161025291906120e6565b60405180910390f35b6102756004803603810190610270919061191b565b6108f2565b005b610291600480360381019061028c91906118a0565b610a73565b005b6102ad60048036038101906102a891906119e5565b610ad5565b6040516102ba91906120e6565b60405180910390f35b6102dd60048036038101906102d89190611815565b610b7c565b6040516102ea91906120cb565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806103be57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806103ce57506103cd82610c10565b5b9050919050565b6060600080546103e490612518565b80601f016020809104026020016040519081016040528092919081815260200182805461041090612518565b801561045d5780601f106104325761010080835404028352916020019161045d565b820191906000526020600020905b81548152906001019060200180831161044057829003601f168201915b5050505050905090565b600061047282610c7a565b6104b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104a890612228565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006104f7826106f6565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610568576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161055f906122a8565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610587610ce6565b73ffffffffffffffffffffffffffffffffffffffff1614806105b657506105b5816105b0610ce6565b610b7c565b5b6105f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ec906121a8565b60405180910390fd5b6105ff8383610cee565b505050565b60026106106006610da7565b10610650576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064790612248565b60405180910390fd5b600061065c6006610da7565b90506106688282610db5565b6106726006610dd3565b5050565b610687610681610ce6565b82610de9565b6106c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106bd906122c8565b60405180910390fd5b6106d1838383610ec7565b505050565b6106f183838360405180602001604052806000815250610a73565b505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561079f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610796906121e8565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610819576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610810906121c8565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60606001805461086f90612518565b80601f016020809104026020016040519081016040528092919081815260200182805461089b90612518565b80156108e85780601f106108bd576101008083540402835291602001916108e8565b820191906000526020600020905b8154815290600101906020018083116108cb57829003601f168201915b5050505050905090565b6108fa610ce6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610968576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095f90612168565b60405180910390fd5b8060056000610975610ce6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610a22610ce6565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610a6791906120cb565b60405180910390a35050565b610a84610a7e610ce6565b83610de9565b610ac3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aba906122c8565b60405180910390fd5b610acf84848484611123565b50505050565b6060610ae082610c7a565b610b1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1690612288565b60405180910390fd5b6000610b2961117f565b90506000815111610b495760405180602001604052806000815250610b74565b80610b5384611196565b604051602001610b64929190612040565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16610d61836106f6565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b610dcf828260405180602001604052806000815250611343565b5050565b6001816000016000828254019250508190555050565b6000610df482610c7a565b610e33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2a90612188565b60405180910390fd5b6000610e3e836106f6565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480610ead57508373ffffffffffffffffffffffffffffffffffffffff16610e9584610467565b73ffffffffffffffffffffffffffffffffffffffff16145b80610ebe5750610ebd8185610b7c565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16610ee7826106f6565b73ffffffffffffffffffffffffffffffffffffffff1614610f3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3490612268565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610fad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa490612148565b60405180910390fd5b610fb883838361139e565b610fc3600082610cee565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611013919061242e565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461106a91906123a7565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b61112e848484610ec7565b61113a848484846113a3565b611179576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117090612108565b60405180910390fd5b50505050565b606060405180602001604052806000815250905090565b606060008214156111de576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061133e565b600082905060005b600082146112105780806111f99061254a565b915050600a8261120991906123fd565b91506111e6565b60008167ffffffffffffffff811115611252577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156112845781602001600182028036833780820191505090505b5090505b600085146113375760018261129d919061242e565b9150600a856112ac9190612593565b60306112b891906123a7565b60f81b8183815181106112f4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561133091906123fd565b9450611288565b8093505050505b919050565b61134d838361153a565b61135a60008484846113a3565b611399576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139090612108565b60405180910390fd5b505050565b505050565b60006113c48473ffffffffffffffffffffffffffffffffffffffff16611708565b1561152d578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026113ed610ce6565b8786866040518563ffffffff1660e01b815260040161140f949392919061207f565b602060405180830381600087803b15801561142957600080fd5b505af192505050801561145a57506040513d601f19601f8201168201806040525081019061145791906119bc565b60015b6114dd573d806000811461148a576040519150601f19603f3d011682016040523d82523d6000602084013e61148f565b606091505b506000815114156114d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114cc90612108565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611532565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a190612208565b60405180910390fd5b6115b381610c7a565b156115f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ea90612128565b60405180910390fd5b6115ff6000838361139e565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461164f91906123a7565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b600061172e61172984612334565b612303565b90508281526020810184848401111561174657600080fd5b6117518482856124d6565b509392505050565b60008135905061176881612691565b92915050565b60008135905061177d816126a8565b92915050565b600081359050611792816126bf565b92915050565b6000815190506117a7816126bf565b92915050565b600082601f8301126117be57600080fd5b81356117ce84826020860161171b565b91505092915050565b6000813590506117e6816126d6565b92915050565b6000602082840312156117fe57600080fd5b600061180c84828501611759565b91505092915050565b6000806040838503121561182857600080fd5b600061183685828601611759565b925050602061184785828601611759565b9150509250929050565b60008060006060848603121561186657600080fd5b600061187486828701611759565b935050602061188586828701611759565b9250506040611896868287016117d7565b9150509250925092565b600080600080608085870312156118b657600080fd5b60006118c487828801611759565b94505060206118d587828801611759565b93505060406118e6878288016117d7565b925050606085013567ffffffffffffffff81111561190357600080fd5b61190f878288016117ad565b91505092959194509250565b6000806040838503121561192e57600080fd5b600061193c85828601611759565b925050602061194d8582860161176e565b9150509250929050565b6000806040838503121561196a57600080fd5b600061197885828601611759565b9250506020611989858286016117d7565b9150509250929050565b6000602082840312156119a557600080fd5b60006119b384828501611783565b91505092915050565b6000602082840312156119ce57600080fd5b60006119dc84828501611798565b91505092915050565b6000602082840312156119f757600080fd5b6000611a05848285016117d7565b91505092915050565b611a1781612462565b82525050565b611a2681612474565b82525050565b6000611a3782612364565b611a41818561237a565b9350611a518185602086016124e5565b611a5a81612680565b840191505092915050565b6000611a708261236f565b611a7a818561238b565b9350611a8a8185602086016124e5565b611a9381612680565b840191505092915050565b6000611aa98261236f565b611ab3818561239c565b9350611ac38185602086016124e5565b80840191505092915050565b6000611adc60328361238b565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b6000611b42601c8361238b565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b6000611b8260248361238b565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000611be860198361238b565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b6000611c28602c8361238b565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000611c8e60388361238b565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b6000611cf4602a8361238b565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000611d5a60298361238b565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000611dc060208361238b565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000611e00602c8361238b565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000611e66601e8361238b565b91507f4d6178696d756d206e756d626572206f66204e465473207265616368656400006000830152602082019050919050565b6000611ea660298361238b565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000611f0c602f8361238b565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b6000611f7260218361238b565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000611fd860318361238b565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b61203a816124cc565b82525050565b600061204c8285611a9e565b91506120588284611a9e565b91508190509392505050565b60006020820190506120796000830184611a0e565b92915050565b60006080820190506120946000830187611a0e565b6120a16020830186611a0e565b6120ae6040830185612031565b81810360608301526120c08184611a2c565b905095945050505050565b60006020820190506120e06000830184611a1d565b92915050565b600060208201905081810360008301526121008184611a65565b905092915050565b6000602082019050818103600083015261212181611acf565b9050919050565b6000602082019050818103600083015261214181611b35565b9050919050565b6000602082019050818103600083015261216181611b75565b9050919050565b6000602082019050818103600083015261218181611bdb565b9050919050565b600060208201905081810360008301526121a181611c1b565b9050919050565b600060208201905081810360008301526121c181611c81565b9050919050565b600060208201905081810360008301526121e181611ce7565b9050919050565b6000602082019050818103600083015261220181611d4d565b9050919050565b6000602082019050818103600083015261222181611db3565b9050919050565b6000602082019050818103600083015261224181611df3565b9050919050565b6000602082019050818103600083015261226181611e59565b9050919050565b6000602082019050818103600083015261228181611e99565b9050919050565b600060208201905081810360008301526122a181611eff565b9050919050565b600060208201905081810360008301526122c181611f65565b9050919050565b600060208201905081810360008301526122e181611fcb565b9050919050565b60006020820190506122fd6000830184612031565b92915050565b6000604051905081810181811067ffffffffffffffff8211171561232a57612329612651565b5b8060405250919050565b600067ffffffffffffffff82111561234f5761234e612651565b5b601f19601f8301169050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006123b2826124cc565b91506123bd836124cc565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156123f2576123f16125c4565b5b828201905092915050565b6000612408826124cc565b9150612413836124cc565b925082612423576124226125f3565b5b828204905092915050565b6000612439826124cc565b9150612444836124cc565b925082821015612457576124566125c4565b5b828203905092915050565b600061246d826124ac565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156125035780820151818401526020810190506124e8565b83811115612512576000848401525b50505050565b6000600282049050600182168061253057607f821691505b6020821081141561254457612543612622565b5b50919050565b6000612555826124cc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612588576125876125c4565b5b600182019050919050565b600061259e826124cc565b91506125a9836124cc565b9250826125b9576125b86125f3565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b61269a81612462565b81146126a557600080fd5b50565b6126b181612474565b81146126bc57600080fd5b50565b6126c881612480565b81146126d357600080fd5b50565b6126df816124cc565b81146126ea57600080fd5b5056fea264697066735822122034e154cd8781c80acb9d5503003b28406b59a779ccc94ec7ffd35c309057d49d64736f6c63430008000033