60806040525f60165f6101000a81548160ff02191690831515021790555034801562000029575f80fd5b506040516200449d3803806200449d83398181016040528101906200004f9190620004a3565b8282806003908162000062919062000768565b50816002908162000074919062000768565b5050506200008833620000e360201b60201c565b6200009a3082620001a660201b60201c565b3360105f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050506200095d565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000217576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200020e90620008aa565b60405180910390fd5b8060045f8282546200022a9190620008f7565b925050819055508060015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620002da919062000942565b60405180910390a35050565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6200034782620002ff565b810181811067ffffffffffffffff821117156200036957620003686200030f565b5b80604052505050565b5f6200037d620002e6565b90506200038b82826200033c565b919050565b5f67ffffffffffffffff821115620003ad57620003ac6200030f565b5b620003b882620002ff565b9050602081019050919050565b5f5b83811015620003e4578082015181840152602081019050620003c7565b5f8484015250505050565b5f62000405620003ff8462000390565b62000372565b905082815260208101848484011115620004245762000423620002fb565b5b62000431848285620003c5565b509392505050565b5f82601f83011262000450576200044f620002f7565b5b815162000462848260208601620003ef565b91505092915050565b5f819050919050565b6200047f816200046b565b81146200048a575f80fd5b50565b5f815190506200049d8162000474565b92915050565b5f805f60608486031215620004bd57620004bc620002ef565b5b5f84015167ffffffffffffffff811115620004dd57620004dc620002f3565b5b620004eb8682870162000439565b935050602084015167ffffffffffffffff8111156200050f576200050e620002f3565b5b6200051d8682870162000439565b925050604062000530868287016200048d565b9150509250925092565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200058957607f821691505b6020821081036200059f576200059e62000544565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620006037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620005c6565b6200060f8683620005c6565b95508019841693508086168417925050509392505050565b5f819050919050565b5f620006506200064a62000644846200046b565b62000627565b6200046b565b9050919050565b5f819050919050565b6200066b8362000630565b620006836200067a8262000657565b848454620005d2565b825550505050565b5f90565b620006996200068b565b620006a681848462000660565b505050565b5b81811015620006cd57620006c15f826200068f565b600181019050620006ac565b5050565b601f8211156200071c57620006e681620005a5565b620006f184620005b7565b8101602085101562000701578190505b620007196200071085620005b7565b830182620006ab565b50505b505050565b5f82821c905092915050565b5f6200073e5f198460080262000721565b1980831691505092915050565b5f6200075883836200072d565b9150826002028217905092915050565b62000773826200053a565b67ffffffffffffffff8111156200078f576200078e6200030f565b5b6200079b825462000571565b620007a8828285620006d1565b5f60209050601f831160018114620007de575f8415620007c9578287015190505b620007d585826200074b565b86555062000844565b601f198416620007ee86620005a5565b5f5b828110156200081757848901518255600182019150602085019450602081019050620007f0565b8683101562000837578489015162000833601f8916826200072d565b8355505b6001600288020188555050505b505050505050565b5f82825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62000892601f836200084c565b91506200089f826200085c565b602082019050919050565b5f6020820190508181035f830152620008c38162000884565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62000903826200046b565b915062000910836200046b565b92508282019050808211156200092b576200092a620008ca565b5b92915050565b6200093c816200046b565b82525050565b5f602082019050620009575f83018462000931565b92915050565b613b32806200096b5f395ff3fe608060405260043610610233575f3560e01c80638091f3bf1161012d578063cce5bc1a116100aa578063e74b981b1161006e578063e74b981b1461083c578063f071db5a14610864578063f2fde38b1461088e578063f887ea40146108b6578063f928364c146108e05761023a565b8063cce5bc1a14610766578063cf46f24c14610790578063dca69d21146107ba578063dd62ed3e146107e4578063de2bf59f146108205761023a565b8063a64e4f8a116100f1578063a64e4f8a14610682578063a9059cbb146106ac578063aa4bde28146106e8578063ac38693e14610712578063bee0d6ad1461073c5761023a565b80638091f3bf1461059e5780638da5cb5b146105c857806395d89b41146105f2578063a457c2d71461061c578063a59a9973146106585761023a565b8063313ce567116101bb5780634a11e7061161017f5780634a11e706146104d057806367243482146104fa57806370a0823114610522578063715018a61461055e5780637b24ab32146105745761023a565b8063313ce567146103ec5780633582ad231461041657806339509351146104405780633fc8cef31461047c57806346904840146104a65761023a565b8063095ea7b311610202578063095ea7b3146102f85780630b78f9c01461033457806318160ddd1461035c578063215b0dc61461038657806323b872dd146103b05761023a565b8063046f71501461023e57806305120ecf1461026857806305bf0e841461029257806306fdde03146102ce5761023a565b3661023a57005b5f80fd5b348015610249575f80fd5b506102526108f6565b60405161025f919061268e565b60405180910390f35b348015610273575f80fd5b5061027c6108fc565b604051610289919061268e565b60405180910390f35b34801561029d575f80fd5b506102b860048036038101906102b3919061273c565b610902565b6040516102c5919061268e565b60405180910390f35b3480156102d9575f80fd5b506102e2610a2e565b6040516102ef919061282a565b60405180910390f35b348015610303575f80fd5b5061031e6004803603810190610319919061284a565b610abe565b60405161032b91906128a2565b60405180910390f35b34801561033f575f80fd5b5061035a600480360381019061035591906128bb565b610ad9565b005b348015610367575f80fd5b50610370610b40565b60405161037d919061268e565b60405180910390f35b348015610391575f80fd5b5061039a610b49565b6040516103a7919061268e565b60405180910390f35b3480156103bb575f80fd5b506103d660048036038101906103d191906128f9565b610b4f565b6040516103e391906128a2565b60405180910390f35b3480156103f7575f80fd5b50610400610b76565b60405161040d9190612964565b60405180910390f35b348015610421575f80fd5b5061042a610b7e565b60405161043791906128a2565b60405180910390f35b34801561044b575f80fd5b506104666004803603810190610461919061284a565b610b91565b60405161047391906128a2565b60405180910390f35b348015610487575f80fd5b50610490610bc0565b60405161049d919061298c565b60405180910390f35b3480156104b1575f80fd5b506104ba610be5565b6040516104c7919061298c565b60405180910390f35b3480156104db575f80fd5b506104e4610c0a565b6040516104f1919061268e565b60405180910390f35b348015610505575f80fd5b50610520600480360381019061051b9190612ba5565b610c10565b005b34801561052d575f80fd5b5061054860048036038101906105439190612c1b565b610cbc565b604051610555919061268e565b60405180910390f35b348015610569575f80fd5b50610572610d02565b005b34801561057f575f80fd5b50610588610d15565b604051610595919061268e565b60405180910390f35b3480156105a9575f80fd5b506105b2610d1b565b6040516105bf91906128a2565b60405180910390f35b3480156105d3575f80fd5b506105dc610d2e565b6040516105e9919061298c565b60405180910390f35b3480156105fd575f80fd5b50610606610d56565b604051610613919061282a565b60405180910390f35b348015610627575f80fd5b50610642600480360381019061063d919061284a565b610de6565b60405161064f91906128a2565b60405180910390f35b348015610663575f80fd5b5061066c610e54565b6040516106799190612ca1565b60405180910390f35b34801561068d575f80fd5b50610696610e79565b6040516106a391906128a2565b60405180910390f35b3480156106b7575f80fd5b506106d260048036038101906106cd919061284a565b610e8c565b6040516106df91906128a2565b60405180910390f35b3480156106f3575f80fd5b506106fc610ea7565b604051610709919061268e565b60405180910390f35b34801561071d575f80fd5b50610726610ead565b604051610733919061298c565b60405180910390f35b348015610747575f80fd5b50610750610ed2565b60405161075d919061268e565b60405180910390f35b348015610771575f80fd5b5061077a610ed8565b60405161078791906128a2565b60405180910390f35b34801561079b575f80fd5b506107a4610eeb565b6040516107b1919061268e565b60405180910390f35b3480156107c5575f80fd5b506107ce610ef1565b6040516107db919061268e565b60405180910390f35b3480156107ef575f80fd5b5061080a60048036038101906108059190612cba565b610ef7565b604051610817919061268e565b60405180910390f35b61083a60048036038101906108359190612f02565b610f78565b005b348015610847575f80fd5b50610862600480360381019061085d9190612c1b565b6117c3565b005b34801561086f575f80fd5b5061087861189b565b604051610885919061268e565b60405180910390f35b348015610899575f80fd5b506108b460048036038101906108af9190612c1b565b6118a1565b005b3480156108c1575f80fd5b506108ca611923565b6040516108d79190612f88565b60405180910390f35b3480156108eb575f80fd5b506108f4611948565b005b600a5481565b600d5481565b5f808590505f8173ffffffffffffffffffffffffffffffffffffffff1663fc7efcda308888886040518563ffffffff1660e01b81526004016109479493929190612fc1565b60e060405180830381865afa158015610962573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061098691906130c6565b90505f8160036007811061099d5761099c6130f1565b5b602002015190505f8373ffffffffffffffffffffffffffffffffffffffff1663b339b3686040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109ee573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a12919061311e565b90508082610a209190613176565b945050505050949350505050565b606060028054610a3d906131d6565b80601f0160208091040260200160405190810160405280929190818152602001828054610a69906131d6565b8015610ab45780601f10610a8b57610100808354040283529160200191610ab4565b820191905f5260205f20905b815481529060010190602001808311610a9757829003601f168201915b5050505050905090565b5f80339050610ace818585611984565b600191505092915050565b610ae1611b46565b6006548211158015610af557506007548111155b610afd575f80fd5b81600681905550806007819055505f600754600654610b1c9190613176565b03610b3c575f600560176101000a81548160ff0219169083151502179055505b5050565b5f600454905090565b60145481565b5f80339050610b5f858285611bbd565b610b6a858585611c48565b60019150509392505050565b5f6012905090565b600560159054906101000a900460ff1681565b5f80339050610bb5818585610ba68589610ef7565b610bb09190613176565b611984565b600191505092915050565b60115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b610c18611b46565b5f600b54610c2530610cbc565b610c2f9190613206565b90505f5b8351811015610cb657610c7b30858381518110610c5357610c526130f1565b5b6020026020010151858481518110610c6e57610c6d6130f1565b5b6020026020010151612190565b828181518110610c8e57610c8d6130f1565b5b602002602001015182610ca19190613206565b91508080610cae90613239565b915050610c33565b50505050565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610d0a611b46565b610d135f6123e9565b565b60065481565b600560149054906101000a900460ff1681565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060038054610d65906131d6565b80601f0160208091040260200160405190810160405280929190818152602001828054610d91906131d6565b8015610ddc5780601f10610db357610100808354040283529160200191610ddc565b820191905f5260205f20905b815481529060010190602001808311610dbf57829003601f168201915b5050505050905090565b5f803390505f610df68286610ef7565b905083811015610e3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e32906132f0565b60405180910390fd5b610e488286868403611984565b60019250505092915050565b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560179054906101000a900460ff1681565b5f80339050610e9c818585611c48565b600191505092915050565b60095481565b600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b600560169054906101000a900460ff1681565b60085481565b60075481565b5f805f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b610f80611b46565b610f8930610cbc565b835f60048110610f9c57610f9b6130f1565b5b60200201511115610fe2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd990613358565b60405180910390fd5b835f60038110610ff557610ff46130f1565b5b602002015160135f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fc7efcda308760016003811061108c5761108b6130f1565b5b6020020151876001600481106110a5576110a46130f1565b5b6020020151886002600481106110be576110bd6130f1565b5b60200201516040518563ffffffff1660e01b81526004016110e29493929190612fc1565b60e060405180830381865afa1580156110fd573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061112191906130c6565b90505f81600360078110611138576111376130f1565b5b602002015190505f60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b339b3686040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111aa573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111ce919061311e565b90506111fa30885f600381106111e7576111e66130f1565b5b60200201516111f530610cbc565b611984565b4781836112079190613176565b1115611248576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123f906133c0565b60405180910390fd5b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b7ae027b82846112919190613176565b30895f600481106112a5576112a46130f1565b5b60200201518b6001600381106112be576112bd6130f1565b5b60200201518b6001600481106112d7576112d66130f1565b5b60200201518c6002600481106112f0576112ef6130f1565b5b602002015133426040518963ffffffff1660e01b815260040161131997969594939291906133de565b60206040518083038185885af1158015611335573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061135a919061311e565b60148190555085600360048110611374576113736130f1565b5b6020020151600e8190555086600260038110611393576113926130f1565b5b602002015160125f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611441573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611465919061345f565b60115f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561150f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611533919061345f565b90508073ffffffffffffffffffffffffffffffffffffffff1663e6a439053060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115bc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115e0919061345f565b6040518363ffffffff1660e01b81526004016115fd92919061348a565b602060405180830381865afa158015611618573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061163c919061345f565b600f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550855f6003811061168e5761168d6130f1565b5b6020020151600681905550856001600381106116ad576116ac6130f1565b5b6020020151600781905550845f600481106116cb576116ca6130f1565b5b6020020151600881905550846001600481106116ea576116e96130f1565b5b602002015160098190555084600260048110611709576117086130f1565b5b6020020151436117199190613176565b60158190555084600360048110611733576117326130f1565b5b6020020151426117439190613176565b600a819055506001600560176101000a81548160ff0219169083151502179055506001600560156101000a81548160ff02191690831515021790555085600260038110611793576117926130f1565b5b6020020151600d819055506001600560146101000a81548160ff0219169083151502179055505050505050505050565b6117cb610d2e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611850575060105f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611858575f80fd5b8060105f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c5481565b6118a9611b46565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611917576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190e90613521565b60405180910390fd5b611920816123e9565b50565b60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611950611b46565b600560159054906101000a900460ff16611968575f80fd5b5f600560156101000a81548160ff021916908315150217905550565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036119f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e9906135af565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a579061363d565b60405180910390fd5b805f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611b39919061268e565b60405180910390a3505050565b3373ffffffffffffffffffffffffffffffffffffffff16611b65610d2e565b73ffffffffffffffffffffffffffffffffffffffff1614611bbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb2906136a5565b60405180910390fd5b565b5f611bc88484610ef7565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611c425781811015611c34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2b9061370d565b60405180910390fd5b611c418484848403611984565b5b50505050565b5f811480611c61575060165f9054906101000a900460ff165b80611c795750600560149054906101000a900460ff16155b15611c8e57611c89838383612190565b61218b565b600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611fe6575f600b541115611d3257600160165f6101000a81548160ff021916908315150217905550611d11600b546124ac565b5f600b819055505f60165f6101000a81548160ff0219169083151502179055505b600560179054906101000a900460ff1615611da1575f61271060075483611d59919061372b565b611d639190613799565b90505f811115611d9f578082611d799190613206565b9150611d86843083612190565b80600b5f828254611d979190613176565b925050819055505b505b600560169054906101000a900460ff16158015611dbd57505f47115b15611f185760135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663579f0b0f600e5447611e0d9190613799565b6014546040518363ffffffff1660e01b8152600401611e2c919061268e565b5f604051808303818588803b158015611e43575f80fd5b505af1158015611e55573d5f803e3d5ffd5b50505050505f60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318d99c726014546040518263ffffffff1660e01b8152600401611eb7919061268e565b602060405180830381865afa158015611ed2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ef6919061311e565b03611f17576001600560166101000a81548160ff0219169083151502179055505b5b5f471115611fe557600d54600c5410611f3a57611f355f80610ad9565b611fe4565b5f60105f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051611f80906137f6565b5f6040518083038185875af1925050503d805f8114611fba576040519150601f19603f3d011682016040523d82523d5f602084013e611fbf565b606091505b505090508015611fe25747600c5f828254611fda9190613176565b925050819055505b505b5b5b600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561204e5750600560179054906101000a900460ff165b156120ad575f61271060065483612065919061372b565b61206f9190613799565b90505f8111156120ab5780826120859190613206565b9150612092843083612190565b80600b5f8282546120a39190613176565b925050819055505b505b600560159054906101000a900460ff161561217f576008548111156120d0575f80fd5b600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146121465760095461213083610cbc565b8261213b9190613176565b1115612145575f80fd5b5b600a5442111561216f575f600560156101000a81548160ff02191690831515021790555061217e565b60155443101561217d575f80fd5b5b5b61218a838383612190565b5b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036121fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f59061387a565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361226c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226390613908565b60405180910390fd5b5f60015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156122f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e790613996565b60405180910390fd5b81810360015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516123db919061268e565b60405180910390a350505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f600267ffffffffffffffff8111156124c8576124c76129a9565b5b6040519080825280602002602001820160405280156124f65781602001602082028036833780820191505090505b50905030815f8151811061250d5761250c6130f1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160018151811061257d5761257c6130f1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506125e33060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611984565b60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401612645959493929190613aa4565b5f604051808303815f87803b15801561265c575f80fd5b505af115801561266e573d5f803e3d5ffd5b505050505050565b5f819050919050565b61268881612676565b82525050565b5f6020820190506126a15f83018461267f565b92915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6126e1826126b8565b9050919050565b6126f1816126d7565b81146126fb575f80fd5b50565b5f8135905061270c816126e8565b92915050565b61271b81612676565b8114612725575f80fd5b50565b5f8135905061273681612712565b92915050565b5f805f8060808587031215612754576127536126b0565b5b5f612761878288016126fe565b9450506020612772878288016126fe565b935050604061278387828801612728565b925050606061279487828801612728565b91505092959194509250565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156127d75780820151818401526020810190506127bc565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6127fc826127a0565b61280681856127aa565b93506128168185602086016127ba565b61281f816127e2565b840191505092915050565b5f6020820190508181035f83015261284281846127f2565b905092915050565b5f80604083850312156128605761285f6126b0565b5b5f61286d858286016126fe565b925050602061287e85828601612728565b9150509250929050565b5f8115159050919050565b61289c81612888565b82525050565b5f6020820190506128b55f830184612893565b92915050565b5f80604083850312156128d1576128d06126b0565b5b5f6128de85828601612728565b92505060206128ef85828601612728565b9150509250929050565b5f805f606084860312156129105761290f6126b0565b5b5f61291d868287016126fe565b935050602061292e868287016126fe565b925050604061293f86828701612728565b9150509250925092565b5f60ff82169050919050565b61295e81612949565b82525050565b5f6020820190506129775f830184612955565b92915050565b612986816126d7565b82525050565b5f60208201905061299f5f83018461297d565b92915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6129df826127e2565b810181811067ffffffffffffffff821117156129fe576129fd6129a9565b5b80604052505050565b5f612a106126a7565b9050612a1c82826129d6565b919050565b5f67ffffffffffffffff821115612a3b57612a3a6129a9565b5b602082029050602081019050919050565b5f80fd5b5f612a62612a5d84612a21565b612a07565b90508083825260208201905060208402830185811115612a8557612a84612a4c565b5b835b81811015612aae5780612a9a88826126fe565b845260208401935050602081019050612a87565b5050509392505050565b5f82601f830112612acc57612acb6129a5565b5b8135612adc848260208601612a50565b91505092915050565b5f67ffffffffffffffff821115612aff57612afe6129a9565b5b602082029050602081019050919050565b5f612b22612b1d84612ae5565b612a07565b90508083825260208201905060208402830185811115612b4557612b44612a4c565b5b835b81811015612b6e5780612b5a8882612728565b845260208401935050602081019050612b47565b5050509392505050565b5f82601f830112612b8c57612b8b6129a5565b5b8135612b9c848260208601612b10565b91505092915050565b5f8060408385031215612bbb57612bba6126b0565b5b5f83013567ffffffffffffffff811115612bd857612bd76126b4565b5b612be485828601612ab8565b925050602083013567ffffffffffffffff811115612c0557612c046126b4565b5b612c1185828601612b78565b9150509250929050565b5f60208284031215612c3057612c2f6126b0565b5b5f612c3d848285016126fe565b91505092915050565b5f819050919050565b5f612c69612c64612c5f846126b8565b612c46565b6126b8565b9050919050565b5f612c7a82612c4f565b9050919050565b5f612c8b82612c70565b9050919050565b612c9b81612c81565b82525050565b5f602082019050612cb45f830184612c92565b92915050565b5f8060408385031215612cd057612ccf6126b0565b5b5f612cdd858286016126fe565b9250506020612cee858286016126fe565b9150509250929050565b5f67ffffffffffffffff821115612d1257612d116129a9565b5b602082029050919050565b5f612d2f612d2a84612cf8565b612a07565b90508060208402830185811115612d4957612d48612a4c565b5b835b81811015612d725780612d5e88826126fe565b845260208401935050602081019050612d4b565b5050509392505050565b5f82601f830112612d9057612d8f6129a5565b5b6003612d9d848285612d1d565b91505092915050565b5f67ffffffffffffffff821115612dc057612dbf6129a9565b5b602082029050919050565b5f612ddd612dd884612da6565b612a07565b90508060208402830185811115612df757612df6612a4c565b5b835b81811015612e205780612e0c8882612728565b845260208401935050602081019050612df9565b5050509392505050565b5f82601f830112612e3e57612e3d6129a5565b5b6004612e4b848285612dcb565b91505092915050565b5f67ffffffffffffffff821115612e6e57612e6d6129a9565b5b602082029050919050565b5f612e8b612e8684612e54565b612a07565b90508060208402830185811115612ea557612ea4612a4c565b5b835b81811015612ece5780612eba8882612728565b845260208401935050602081019050612ea7565b5050509392505050565b5f82601f830112612eec57612eeb6129a5565b5b6003612ef9848285612e79565b91505092915050565b5f805f806101c08587031215612f1b57612f1a6126b0565b5b5f612f2887828801612d7c565b9450506060612f3987828801612e2a565b93505060e0612f4a87828801612ed8565b925050610140612f5c87828801612e2a565b91505092959194509250565b5f612f7282612c70565b9050919050565b612f8281612f68565b82525050565b5f602082019050612f9b5f830184612f79565b92915050565b5f612fab82612c70565b9050919050565b612fbb81612fa1565b82525050565b5f608082019050612fd45f83018761297d565b612fe16020830186612fb2565b612fee604083018561267f565b612ffb606083018461267f565b95945050505050565b5f67ffffffffffffffff82111561301e5761301d6129a9565b5b602082029050919050565b5f8151905061303781612712565b92915050565b5f61304f61304a84613004565b612a07565b9050806020840283018581111561306957613068612a4c565b5b835b81811015613092578061307e8882613029565b84526020840193505060208101905061306b565b5050509392505050565b5f82601f8301126130b0576130af6129a5565b5b60076130bd84828561303d565b91505092915050565b5f60e082840312156130db576130da6126b0565b5b5f6130e88482850161309c565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f60208284031215613133576131326126b0565b5b5f61314084828501613029565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61318082612676565b915061318b83612676565b92508282019050808211156131a3576131a2613149565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806131ed57607f821691505b602082108103613200576131ff6131a9565b5b50919050565b5f61321082612676565b915061321b83612676565b925082820390508181111561323357613232613149565b5b92915050565b5f61324382612676565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361327557613274613149565b5b600182019050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6132da6025836127aa565b91506132e582613280565b604082019050919050565b5f6020820190508181035f830152613307816132ce565b9050919050565b7f496e73756666696369656e7420746f6b656e73000000000000000000000000005f82015250565b5f6133426013836127aa565b915061334d8261330e565b602082019050919050565b5f6020820190508181035f83015261336f81613336565b9050919050565b7f496e73756666696369656e7420455448000000000000000000000000000000005f82015250565b5f6133aa6010836127aa565b91506133b582613376565b602082019050919050565b5f6020820190508181035f8301526133d78161339e565b9050919050565b5f60e0820190506133f15f83018a61297d565b6133fe602083018961267f565b61340b604083018861297d565b613418606083018761267f565b613425608083018661267f565b61343260a083018561297d565b61343f60c083018461267f565b98975050505050505050565b5f81519050613459816126e8565b92915050565b5f60208284031215613474576134736126b0565b5b5f6134818482850161344b565b91505092915050565b5f60408201905061349d5f83018561297d565b6134aa602083018461297d565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61350b6026836127aa565b9150613516826134b1565b604082019050919050565b5f6020820190508181035f830152613538816134ff565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6135996024836127aa565b91506135a48261353f565b604082019050919050565b5f6020820190508181035f8301526135c68161358d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6136276022836127aa565b9150613632826135cd565b604082019050919050565b5f6020820190508181035f8301526136548161361b565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61368f6020836127aa565b915061369a8261365b565b602082019050919050565b5f6020820190508181035f8301526136bc81613683565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f6136f7601d836127aa565b9150613702826136c3565b602082019050919050565b5f6020820190508181035f830152613724816136eb565b9050919050565b5f61373582612676565b915061374083612676565b925082820261374e81612676565b9150828204841483151761376557613764613149565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6137a382612676565b91506137ae83612676565b9250826137be576137bd61376c565b5b828204905092915050565b5f81905092915050565b50565b5f6137e15f836137c9565b91506137ec826137d3565b5f82019050919050565b5f613800826137d6565b9150819050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6138646025836127aa565b915061386f8261380a565b604082019050919050565b5f6020820190508181035f83015261389181613858565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6138f26023836127aa565b91506138fd82613898565b604082019050919050565b5f6020820190508181035f83015261391f816138e6565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6139806026836127aa565b915061398b82613926565b604082019050919050565b5f6020820190508181035f8301526139ad81613974565b9050919050565b5f819050919050565b5f6139d76139d26139cd846139b4565b612c46565b612676565b9050919050565b6139e7816139bd565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b613a1f816126d7565b82525050565b5f613a308383613a16565b60208301905092915050565b5f602082019050919050565b5f613a52826139ed565b613a5c81856139f7565b9350613a6783613a07565b805f5b83811015613a97578151613a7e8882613a25565b9750613a8983613a3c565b925050600181019050613a6a565b5085935050505092915050565b5f60a082019050613ab75f83018861267f565b613ac460208301876139de565b8181036040830152613ad68186613a48565b9050613ae5606083018561297d565b613af2608083018461267f565b969550505050505056fea264697066735822122042ce1a9b3e02a474943a9d9d542d97e6a7ee4fac77cd1776eee2470ef4eb0b2f64736f6c63430008140033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000c9f2c9cd04674edea400000000000000000000000000000000000000000000000000000000000000000000005585065706500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000055850455045000000000000000000000000000000000000000000000000000000