*Получение "зеркальных, металических" бликов путём включения режима генерации текстур "сферическое наложение". По мотиваи уроков NeHe.#13#10#13#10Автор MAV#13#10andreimav@yandex.ru Make(delphi) ver(4.05 build 186) Add(GL_Main,12986311,238,175) { AASamples=1 link(onInit,12198675:doInit,[]) link(onViewPort,3410847:doPerspective,[(278,188)(278,300)]) link(Handle,5471030:Handle,[(244,128)(174,128)]) } Add(Timer,9506849,147,294) { Interval=10 Enable=1 link(onTimer,1049454:doEvent1,[]) } Add(GL_GTools,771925,238,294) { Point(doClear) Point(doPushMatrix) Point(doPopMatrix) } Add(Hub,1049454,189,294) { OutCount=6 link(onEvent1,771925:doClear,[]) link(onEvent2,771925:doPushMatrix,[]) link(onEvent3,7274590:doWork1,[(221,314)(221,251)]) link(onEvent4,771925:doPopMatrix,[(226,321)(226,314)]) link(onEvent5,12986311:doFlip,[(213,328)(213,195)]) link(onEvent6,14427063:doReadKey,[(215,335)(215,345)(13,345)(13,202)]) } Add(Hub,16299401,182,168) { OutCount=4 link(onEvent1,4161604:doWork1,[(207,174)(207,150)(86,150)(86,90)]) link(onEvent2,12986311:doInit,[]) link(onEvent3,16131419:doWork2,[]) link(onEvent4,9506849:doTimer,[(206,195)(206,283)(135,283)(135,300)]) } Add(GL_GluTools,12198675,315,175) { Texture=0 link(onInit,1101264:doEnabled,[]) } Add(GL_Light,14989894,567,175) { link(onEnabled,609645:doEvent1,[]) } Add(GL_Options,1101264,357,175) { link(onEvent,5851269:doEnabled,[]) } Add(GL_Options,5851269,399,175) { Flag=1 link(onEvent,5809249:doEnabled,[]) } Add(GL_Options,5809249,441,175) { Flag=2 link(onEvent,6878690:doEnabled,[]) } Add(MultiElement,10714674,315,126) { link(onEvent1,16287631:doSet,[]) link(Data1,5471030:MouseX,[(321,114)(160,114)]) link(Data2,5471030:MouseY,[(328,109)(167,109)]) } BEGIN_SDK Add(EditMulti,4359962,3,3) { EventCount=1 WorkCount=1 DataCount=2 Width=223 Height=109 link(doWork1,3276760:doRotate,[(19,9)(19,55)]) } Add(GL_Rotate,3276760,35,49) { Y=1 link(onRotate,8079493:doRotate,[]) link(Angle,4359962:Data1,[(62,15)(9,15)]) } Add(GL_Rotate,8079493,112,49) { X=1 link(onRotate,4359962:onEvent1,[(189,55)(189,9)]) link(Angle,4359962:Data2,[(139,8)(16,8)]) } END_SDK Add(GL_Perspective,3410847,287,294) { Fovy=70 zFar=2000 link(Aspect,14496503:Var2,[]) } Add(HubEx,16131419,210,182) { link(onEvent,12986311:doViewPort,[]) } Add(GL_Options,6878690,483,175) { Flag=10 link(onEvent,13361751:doEnabled,[]) } Add(GL_Material,16287631,357,126) { Side=2 Specular=16777215 Emission=65535 Shininess=50 link(onSet,4182753:doTexGeni,[]) } Add(GL_Options,13361751,525,175) { Flag=3 link(onEvent,14989894:doEnabled,[]) } Add(InlineCode,4182753,399,126) { @Hint=#67:Изменить для S,T режим генерации текстур на "сферическое наложение"| WorkPoints=#9:doTexGeni| EventPoints=#9:onTexGeni| Code=#15:unit HiAsmUnit;|0:|9:interface|0:|28:uses kol,Share,Debug,OpenGL;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|25: onTexGeni:THI_Event;|5: |53: procedure doTexGeni(var Data:TData; index:word);|5: end;|0:|14:implementation|0:|60:procedure THiAsmClass.doTexGeni(var Data:TData; index:word);|5:begin|69: // Изменить для S режим генерации текстур на "сферическое наложение"|54: glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP);|71: // Изменить для T режим генерации текстур на "сферическое наложение" |54: glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP);|25: _hi_OnEvent(onTexGeni);|5: end;|0:|4:end.| link(onTexGeni,1785700:EnableGEN,[]) } Add(InlineCode,1785700,441,126) { @Hint=#46:Включить генерацию координат текстуры для S,T | WorkPoints=#9:EnableGEN| EventPoints=#11:onEnableGEN| Code=#15:unit HiAsmUnit;|0:|9:interface|0:|28:uses kol,Share,Debug,OpenGL;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|27: onEnableGEN:THI_Event;|5: |53: procedure EnableGEN(var Data:TData; index:word);|5: end;|0:|14:implementation|0:|60:procedure THiAsmClass.EnableGEN(var Data:TData; index:word);|5:begin|79: glEnable(GL_TEXTURE_GEN_S); // Включим генерацию координат текстуры для S |79: glEnable(GL_TEXTURE_GEN_T); // Включим генерацию координат текстуры для T |27: _hi_OnEvent(onEnableGEN);|5: end;|0:|4:end.| link(onEnableGEN,9906668:doWork1,[]) } Add(Hub,609645,623,175) { link(onEvent1,3747819:doWork1,[]) link(onEvent2,3060881:doInit,[(647,188)(647,125)]) } Add(GL_Text,3060881,665,119) { Depth=0.2 Font=[Times New Roman,5,0,32768,1] Text="HiAsm" link(onDraw,1170453:DisableGEN,[]) link(GLHandle,12986311:GLHandle,[(671,108)(653,108)(653,215)(244,215)]) } Add(InlineCode,1170453,707,126) { @Hint=#47:Отключить генерацию координат текстуры для S,T | WorkPoints=#10:DisableGEN| EventPoints=#12:onDisableGEN| Code=#15:unit HiAsmUnit;|0:|9:interface|0:|28:uses kol,Share,Debug,OpenGL;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|28: onDisableGEN:THI_Event;|5: |54: procedure DisableGEN(var Data:TData; index:word);|5: end;|0:|14:implementation|0:|61:procedure THiAsmClass.DisableGEN(var Data:TData; index:word);|5:begin|32: glDisable(GL_TEXTURE_GEN_S);|32: glDisable(GL_TEXTURE_GEN_T);|30: _hi_OnEvent(onDisableGEN);|5: end;|0:|4:end.| link(onDisableGEN,16008003:doPopMatrix,[]) } Add(Keyboard,14427063,35,196) { Key=27 link(onReadKey,6757641:doCase,[]) } Add(Case,6757641,77,196) { Value=Integer(1) link(onTrue,5471030:doClose,[(139,209)(139,83)]) } Add(MainForm,5471030,154,56) { Width=800 Height=600 Color=0 BorderStyle=0 Point(MouseX) Point(MouseY) Point(onResize) Point(Handle) Point(doWidth) Point(doHeight) link(onCreate,16299401:doEvent1,[(201,76)(201,120)(156,120)(156,174)]) link(onResize,16131419:doWork1,[(214,83)]) } Add(MultiElement,4161604,98,84) { @Hint=#87:Считывает разрешение экрана и соотношение сторон. Устанавливает размер формы и аспект.| link(onEvent1,5471030:doWidth,[]) link(onEvent2,5471030:doHeight,[]) } BEGIN_SDK Add(EditMulti,14495888,10,10) { EventCount=2 WorkCount=1 VarCount=1 Width=398 Height=270 link(doWork1,14428931:doEnum,[(68,16)(68,41)]) link(Var1,4020073:Result,[(16,258)(167,258)]) } Add(Screen,14428931,147,21) { EnumMask="%v%h" link(onEnum,10190258:doEvent1,[(191,27)(191,73)(57,73)(57,146)]) } Add(Hub,10190258,70,140) { OutCount=3 link(onEvent1,13019782:doData,[]) link(onEvent2,11320503:doData,[]) link(onEvent3,4020073:doOperation,[(124,160)(124,209)]) } Add(Math,4020073,161,203) { OpType=3 link(Op1,5983030:Data2,[(167,160)(139,160)]) link(Op2,5775196:Data2,[(174,160)(202,160)]) } Add(GetData,5983030,126,91) { link(Data,14428931:Width,[(132,79)(153,79)]) } Add(GetData,5775196,189,91) { link(Data,14428931:Height,[(195,79)(160,79)]) } Add(DoData,13019782,126,140) { link(onEventData,14495888:onEvent1,[(283,146)(283,16)]) link(Data,5983030:Data1,[]) } Add(DoData,11320503,189,147) { link(onEventData,14495888:onEvent2,[(315,153)(315,23)]) link(Data,5775196:Data1,[]) } END_SDK Add(GL_Scale,16035434,609,126) { X=3.5 Y=3.5 Z=3.5 link(onScale,3060881:doDraw,[]) } Add(GL_Translate,4659828,567,126) { X=-4.5 Y=-0.5 link(onTranslate,16035434:doScale,[]) } Add(GetDataEx,14496503,287,228) { link(Data,4161604:Var1,[(293,143)(104,143)]) } Add(GL_GTools,3678625,525,126) { Point(doPushMatrix) link(onEvent,4659828:doTranslate,[]) } Add(GL_GTools,16008003,749,126) { Point(doPopMatrix) } Add(MultiElement,3747819,665,175) { @Hint=#17:Загрузка текстуры| } BEGIN_SDK Add(EditMulti,9346793,21,21) { EventCount=1 WorkCount=1 Width=363 Height=109 link(doWork1,14010154:doCreate,[(31,27)(31,62)]) } Add(Img_Rotate,1626606,147,56) { Angle=90 link(onResult,13097058:doResize,[]) } Add(Resize,13097058,189,56) { Width=1024 Height=1024 link(onResult,5983898:doGenTextures,[]) } Add(TempFileStream,14010154,63,56) { Stream=[ZIPC04C000078DA947765541C30B7EDE0C5DDDDDDA538C5DD7DB0E20CEE5ADC9DE2EE830FB4B8148A3BC5DDDD8ABBBF7EF7DE277FDF8E9C9D95939D9CFCC8CAF958FAD8026028C8C8CB00A0A00100A87F05F0B10D3890F606590100F2F24C804F0000000E800505F39FA9FF6A9CFF3C49FE59857F8DEB1FC7F967FF3903B0A1FFAF0F2812F6BFAC2FE0BF212E2945A1E9E3E66EE9E0462105B206B99BDA53C83B985A831CAD015C1C1C02821C7C829CBC145C1C823C9F057979FEED08484200C0FE5BC9C1C5C591940CFD5F9CF3332700BAF0BF95FFD3C1FC3F1CEE7FF8AFFFD911FADFE8BF576908F0FF63FFA3C6C9C1F13F0E808F6E00E6A7FF440C03450980C68482C184FA5805840160A0FF01EA3F3DCC3FC022C0FE0788F0F070084888C8C84888484828A89868282818284848E838E8189858D8D8D8C868B878B85878FF3816142C1C1C3C1C3C2A02022A31163A16F1FF373EFA01B5FF028081FA0FFEF769E11160E13EC140432102300050FFCE050D0B030F8D000F07F72F02681858001C263C162502E7276C71751C2A535C2E97E0EF45D4128878DC1A663F7BF0695C43928B69E924A7B779B4EA1B2EAFA0FE5B1EF07F000BF74F051E808009F8AFD8E1FE536161FE73B5D000184C582C4A2A4EB87FD2A6D45C2EDCC1F034123F7B7034BEF39A155D4ABB4E7FAC005060FE2962C26002C400F220540DC25C877ADC30F6E06C5E5B0D83B8539F279D9498C7F4AABCF4006B6C4CDF695195728F7E672F2CE685BCF9018278C66F68DCD9C7DFEA3EABD0C6382AF57E001EECE244CE1848E6C4220CD89335BCCF1453CF8E392C7718DBC3B194F2CC4667429C6B74CA2F274AD6887C5AE6127F09943D1F921FA5CA949E6B63E9EADBD32D57F645AB6029B3588E7F925048B43D745F97A3C043D18FA65718513AFF09A42ADD6BA3A46A14ED48155D52720EAC77607CAB50C534E4426C2585B7646B5666E834F782F81F37743934092F4AE0939195692582B3ACEBFE4E1A2E4B0055544418FD88162A324A7F5C0EA243304B1B8ECED2ABCFFAAD0C89A1571D535E3B24947D7EAF7EEB10A4A514A39AC4695305EDBF284DE561CD28FD9E6EA1150C528C4BE67FD6B13A7548AB2095F569BE4A96E77FB57577781D34E58B63CA72D88EB83FCBA9FBDDE3A1DCBE479FAD90EC2CF3E50320AED431B63DE48869285C64BB7B7550BF60619BFB0DE66D0FFFD9C0922E2CF6CA37DC6977CF421D5D03DC895C12EB20408EF18BBCB7D384502C8A635B69923198B2B6B2C963C9934F688E55DD13BF7A254BFD0F7FF9BCE9B2C19204D33965810A25136BDEBD16074E0273AE752A5BFD0EC3A5FC00AB6335C970C001D10A2166A327026C0CC4DB9A5EB4B14EE0671CC1B5A993548DC4C50E66754DF3F5C0CFE21DB7B79B953C52C94E5C8335D392347B6118A54A7E84FBF03A444EAD2C05899CDCDE1F6A6E1B99CFE66A4DDE3F003AC8D12A420BC0D1161DE2155829430F0AFEB97232C433457CB65ABE025E2491B7D3C2CB3B74B948B536BDFE29DD07931844374FD1C6B1848A1B4A6B180FAAC5C5FD1517BCB50E32CD359E52D0A216FF0E14A5D115B0BC080F3D74A6A639CC17AD37AC79E72E3C6C6A350A4BD6A8D1976CE65C89F16906D5025506CC31F4CDACB284E0474D7391CBD7F43C9488B7C37E70A7145654B4C1C9F357CD841B7FE931A032A53EA273A1DBD980F54E6C8E8C08ECD5B695CB69C4BE319708AADFB160DA1E982E3FF0AAD8FB3DCE951B2A1AD5D1196680CE63662574AE80B106AA3DE4F25A3F2AB554E22124FF584A80C653173EBA20166B7F7B1E2D449432C3E509530F3BF8656C818B40F6B3A293CCE234DE76621770F545C7F194C52B51DD3840D652CB66E466FFAF9944B4E4B406F04AD11AC4BC42D35A26FE5C498FB3B5802204538D5DC4CF9791A398793F3CF4ACD3FECE2BF06072232C6397D14ED7CF9A4DC895AB82CFD897D8C77B5A33D12F93D1DC2D4F2E9852F027D2AAB76E24951A118A172E7B6A51252F831411D93259CB7FC28AD97FDAB5BDB4A284DE6F09E6A636B4F71DCCA65A4A153EC29FADB3EE146B3B0D69D7828E0DE47CDE09A182B09D3615216D2B80E7AF09869B9CCD71955F45F3111F70955B7C7F5E28241DD2219C92BC7136F947CEFE6EC409CAB0CCDB7B3E23ADDE1B4BA6B5D516A0D49739770585B8E81EE0A19B72FAB73F66A111D8EAB8E91205DCBFC56AC2E226859381F6E74290C8F5E36343A34001C1E4EAA026D65F58A5377239776D3A8BEB09B57CB94875E1028435CF123CE5718AC6396B28763F1D66AFB12F542AE85D616AD843CFF41E8B77D6BAEF6217593459E53D18759DEDE4BC03163D77763DDB1268D96082530C2776BFA2D0017556BF8EB39E761E50353EEFD63756F07370D811D81E89F533C2B4411A2762DD90E74980D4627D0169D2BFC56D21AE2FDE520C1B0A38FE975A8133E135BA9F6978DA6275BECD575ADF08549FB42F676BBF779B8D559F2AD6B76889668EB18A060969961A3E06D0471ECB8662FD7440921FC2C95C54EF62AFA8D4D04E6374478F74EE1FA9B090A14CC09C5AA0FA7ED3345295237200A410B26354077D0BD50B1F36BD61BE4F2111A43BD0468C2A390F9E807A8C8A278C4FD6A7F64DE5D69E41AF401F9F25AE5EC7CDE3F357F7BD292FA315A7EDC82114EDAE8179F7000BEEDB689113D04DF5BAE2A242AAC99F7352E5742FA41E43E25FBA68839E59022CCB2A5DF80CA4F8595DF68AA86136820433DC0DC72620E1D5148C026F8C269EE297566CDEFD45F3875BEDE2227E5D3701B7D1C77449AE17950727F4D3AF7C86B4BF5E663F00E80DA3D37A1BAF12B7E611E1C01263E189699D85DC27F5DEB6AA3CFA0AE1F7E2C63466A1B4139BF0D9B3C282E843429A21FF9EAD6A20E04E39106447DCF2A637DF598BF3FBBA56DF5B130AC6CD4C881DD971119C1DB28145684F0D73AC10AFEEED4948066CE399965588AE26214C6445638D4D36F1A2CEE6CAC6665A8B56CA4D1218707F0E5E40A1BA0A41A1997A0E7AFD12F17C8D3E162AB16EDD54B5E92C751079B97611635246A6D34176C32A866786A8079D022B07327C28F70C372C6FF473358185F39C6C02ED04E1D0F9E9708F53A46FDC4B4C6F2E40581C55836EDCB6444B0597871979C744F9BE0E100E7E4A7F302E343A9FC5189896DDBF9BF42DFDF5636DE1B5FF46BFD8C70213D10E358CE0BE002E3FE7032079376857F899E96FB2F85F79FDEEB76A91A307D88482A2FEDCA4025FA69E5BC56F7D0E04D2E4988173E9EBE99720404AF6CFA97BA7E07ACAC30844C23270EF51EFA8F5B119399DE73AC3C94C5DABC831BB4BA7087525D4D743DB4B38CBED91BC99B9C1FD328BEA8468978C2CC64F4EA117C6B78D0CB5AB79FEE38E2AE2850521DD72C26DE3E6EE6FE4B86DA8F4A907E96FDE520F8E1D86F22BA82A4941DDE43E650151B1EBD884E67AAB9B22D3AC60EB4B3D48CADCD2749DA8705157EAEB4FFBBF820FAF5F88668D5DE5920ACA64874304FF98D19F88B12288898AF91AD90D7C000EA318EEA95F2B5DDE9C45C27A4710B48BC612D2B57F8AE401882A5B56778F36D2054893B0EA53563712C15D51756BBDEE67E1516387B91DA775C9F21AD1BCECD2B40A272C8E81D9EDE5434981D8E62B363E021CC432FE0CA7250BFB79166F73976B329F26E7B57B139682E8373FF12A5D7001533ADA2618EE606FE5E7A938455A4966397CD25FCA9CD3F00477B6D3E2E6C1453313F14A5D6E03EECD9629F098A6B42EC29239975EDDBBB683A878B63FFE541DBBC8F7E64AB88A1C09E95A567EBDE5A6153224802B62B9AEFD3CF8F78C07CCBF5B5483AE62A779AA4CF527FC98040ED6FE092BF471A7A45FE56085AE05B5BFFB111B930B4D56587B20DB4C2F6D5FE041FEAED66A6F2BAA802CA5E91D46A5974BEF1CDEBB6A9DA6E522FB00351A50E94A435BE3CFADAE6B242B9A6C97484EBE98DE681DAACC5D5C5241E984834BE3D22B6327E06EECB402247460D417F23F4E9BDFED1BFBF601782239C147A2EFE804977BF8486E998B36A95678A0D809D984CC740B0C3231C29F55C3AAB79AE9AFB0F5AA64782009AC85800C3D4BAA103586C60ED4577897FED09E6C4D58CF76E5AF3545C428E2F10798E5D9C1F57A16894583EF1B1BC90AEC2A893C72FAB0D7ECA025E3ACCD0C45A6D06B19053DF4BA9F278CF83789489150153DA42DB0943DAE304B776567CB4CBFC0D27B589A2806DC582ACF5951DCD658858F72A5C43D1D893D202D12759177DF11BD54AEEF7298FF587EC540FC00086EBC570B84E82E0DB0E52639E92E9A001B22E570D86B3C3BE78FFEA6FCBBB2C28E13EE4B2B4741A93337D366405231C777C533D9407CC69888D1FAD4878384E9F8B517E5234282D88E46F607302ED25D3155C17DE6F090B911F5E729A7FEB5ABEFE458AAF75FFD901C6DACE0324A7E6314352D57318B45825D8EB8BABF68B671859C320CA76F233D7B81D9EA909B4FCA2C1892706A6D6E45BCB375372CC3D71CD569703A5AC921C6FA4E7FE481FACEDF8DD6E719957BF9EAC1CCDF118D432419FD117EF38A8EF15E2A99A9CCBBC4283DBA1F30D210DC1E258435946B35B9BB8D2133A161A942B87E7D79FA9C4737D1CE88300AB8BA50706AA0E0CCC69E52D20341D05DDE21957B8579D1EB6AF90ABB931A787C95F424332D5FCFCD56712AC71B6CF53D17CAE66AF6F94BEA907C3181190339DC86766E18AA99FE0DDA15E6CE0F290AFBDD4F692633B22EC685A735423496FB78AD4F8C083FC53E00A949976F8C2EA56CD86B6E09A0B1A477BCBEBD0F80F7CA3D4AA91F8179DD48B8FB4DF6D60CBADE9A550704E821F5771DE82D18A1A6DA38A604EF1397474876E8D15C26D24E7C8DD7B88B5A58D5482EFD0BCBE84E7B0462501BB8BE9376618BA58253573559F8AC6D34A1B4EA37CA407B493D6972C2CA3D6B84D2895F923C95BA2ADD6264F35AE3B22C66023183E81D8CD4D3F0D7839D68925D55796295140D953A3F00CE7A0B9703CE2FB2C0320E1D0D517329630E5E6E359E500EA00E898781AA685A55DD8DA8C93853493C6756A2AC71EA7D51DCB070E51ED407400D52BD109B83E92EA48E5548E6DF7841781816B36ADCA5D93DE7A093F550FED9A31C281F812864C45F2118AEF87D211F9D51EC5402337672E7EB61A95CF6FDF91E2A5BA345B843A97F815AA56FF0F5F5559A6FB6D776EAF9ECCFF063841AAE683B7C07E1BDC6F82512A2E09212706D196CC5D7D28581AE9CBAC6957314B7A198CAE7641EBE27360843D920387BA26B6EBE5930481235CCE5510309DE988D8431886E27CD082BA4F6301BFAC43C42098E1126FD09565DDBCD99EB2E97A0B0FDB8DAE880308052DC64269866C56AF9A2DB4761357FA7839477355826DEF65B7C1987FDE8E3041F56ED96568792720B56B2C0244E7D5F8B730CCBD6778267228F1DBA4294211F71EA5C75CDEC5AA93C9D0A5DDE738A9B946C59E735345A18AC9F4F33A71EF917E5F8243896A04146FFF9F72C857A15D77DCC947DEC9460F9F92B8B8D93070D02690B599754A666EBD009B21C04A5F29311E533CD6D1538727B4D585237528275E7CCB1BA9534A2C901BCC256DC48CC2B2610C961D895C49B584B193CE4C6608B613A8BB994C95F2AC3BCAD4856DD74348F3562BBBE4567270851AE1A957D7B6733F03B996331D2CA277590B0F5554D6376015570CBAF76BE8D593DF71609D019AFADA348D52469182D3F2C75C1429177C815B3E3B1935CEE8CAFA8A2AA896561D1909A2B35CD8358BC19610DA5881223DA745681AF8B87970130D77084C96327045C294BAB205A964E2A6F3ACC4DCBE1FA491D9787415967243E34C974334296AC7E332BFF5E824CD64DDB98B92EC1A8295B232D794548BBAACF3B2BE710D7E129A88BFCB67AA5A166610924CF881E897F8B78F8C62C75D77BF492E79B0542A26DADE1034CB64BDBEDC87AF4FB89AFFE8CD9C825CDD3C805C7015C9947CB797E63140C0C763BDBC818AE6DBE59B12E296CD4B48F97429AFDBE5E328B88F6EE1AE968C88DD4E6F40EAE34F781B6642F54B629DCBF40D6701961F7A68CC29EFCD55CBA5D5E25C47C8D23DD0C2857398F4BB054AA94BBE3CA0491FEBD8CC73E738A29AECE10FF913BB03B9A7C50CA20C5588BD8AB1DA3AE6976E55C5DD119FF49AA0FF546548D697FFB03369BFE5DCDE9B7E90C79D58A09AE33FC1CD1E298604A0634B2BBE593DB83864EF39C93E5E18C4F4DDFB077B79FC40F63F2883E67384BE6041249DAB9616D6E1003F3B43B41B9537F0506E466D5232A4EA8FF3098E735E636E3669B6B5ACA251A7196DD91654764790EB03A94E735DA55F00E741DCFB4506E9A8709A7A6E6EDE6CE38B5D553333D6BDA294D20ADE5D46967371BBCBB50C9497CB9A76B692ECC420793C182599950595B69196F0F1DF8D48354FBC965F81A3E37BEE66705A41EAA5B74504A3D5D305AA49CA8808A8A1CB0E9551D358819ADDBD4CB805B4D1AE8FDE0BE24F3535550E66CEA620A09EB374B0B372521D1742D6B519726C643FA20463826CFBD31A6F3A04EFBD32A9EFCACF7AAE3CFB2832C0E010AAA6B64BDF52A85595CF76BD1F5C606B50C698C0A3AF23CB3129177060B76F9CE94E4919DCA5478752984B642582E13FA1ED1885E3ABF76CDF7BDB29B2A1BFA690C8ED1055DA0ECDDD3329664F046B907587CF32D36AD2AA19834A3E8BD3ACDBF2057B1F3B9F24111917DBACDD93CC3F21F55F2A0E504AAC1492EE228CF574C88EC50DD303CA8FDCBC69B2B6BED3B38EEB8C2DCA320F5C2F3BFF5273C68601AB349C3AED2E611C0D8AFF34C02568F21ABFC76088AF524233466A91951C792B13A226E46F0B1E118ED014B4BD32DBC2DD33FF29754C46C319ADA3E00793A8DF95E5351AD76B4E802D9BA8AFDD22D258AF98F7DF5916305B6F06D3859CC7ABA30D9EAE52F7AAF3D2804B1C2729D638C02A8347485EB87F80E0341B52E4AB8CE3BF6A11588A99F28BF85EA7A32C75EB1311A3862865E98483649D2A11CFF25D424F1F5D2E2DAA39B66FD92EB3BFDCD6CBC11AE69F8B6965A279C983B6B8E0D96BE81420863C8A409DF86993FB4626E07F386D5077762E34592FD1730129DD744652AB2908AA7B90709F07571A3E5F67AFC42AE543E01233294761C0D1559E3E6318FA8D0B62D2BA5D738DF4BD3BBD8670491391EE49C5CF2F677B67AB0B943915428B69452E4ED275C77CA11E37C21C2EAB9149420B3F9056757DE7145E7468A7BEEB75648B50BFD53E5EFB2ED96CFEAD23F57B25786D5C8D92B8A3C3272D6E88B7BF262CD6C130A8EF0BE0267A9801A2B5879A31A1D48528FF1A7993F7CEE4919B660198A169303478BAB1EBEEBDD4554FD95CFDC5FD7FD06DC133C76B17B8AA6E7456D29E1B6481A2B4F661C36748FFE241855C02374A67F7E3EE6A0B7E1D653BCAECC1BFBBB4FB424A9184AA0861749797BDFE19CFAA25C19885988B1707BA6E9A7CAD33EDFCCDF7C5EC426830574D17F364B2B211DC43AE10BE5F92DD178AB882EB3D6CA37AAF677EF292C38B44936714943B6E25A29A16B13A0A39116BCB9A4CD76D096B6F6F553461AAB4B935263B8FF764C302835DD295623918967985DFC559CE5C07BCED149620D6196A7F697BCC2C193ADC864A7E0749D5CF8EC0A07C46D297E26BE526D58D5163C35DEE679426D4F4B93610443AE34B5E5A048A486762367C71CC2BA40D01C811B36644F13AC3882CE248956817D5D9A0C62957490F8E4D783CAD9E652DE5592F707438CA9D6D75B07CC92D2B3DBC9879C4384AF36F153DB636AC3205CA9AC32A57C5F3A2D2F12777EBE0AAD9513E21B3416CA9AE92A69EB50EA884443A35339D329C6EA6E26D2D3F3AA1C947237407D65CC441064ABEB9CB464A9CE061AEA62EC2964AD29A4DA65007C4FB8EBB79D04F4A7D5CD252AF3BAC6A4154B324121EE6D3D6B6C6ADD890614FA698F78CC5E46C59451970B0352DE9B80BEF9227E7C5BE8FAC8BD9D8D20D18C355E96D230215E05EF8A879E42B23285C00A7F4DDF9D97FE7E53698A949E9E3260079F1E110C68E0ABF893232D831401B51D68173AB7F3D3CCFDD1E9F78A0BB6A2CCAB0885056738D8DF1CBE320FD843BAC28A3DEDADE7C9532912FA1678EBFE0D0F5D410BCA27240FA53CE05FDBC0B4DC6457507A34A1E39817C7A0FF8219DA31C2EB427A1A3BFF6EA74497E02EB7D14A3D963FB7AAC49B2B5D492477599E5634A7F68F647412758CE446E0D46C5848A8BE31FC5F55203F66A5E55C65A3FBA2F7B7B70D81CA15BDFC62DB233E678545CAEE347FEC934005F97D735696BE1FD9C1BE217091E242481B3F2491953C67C47A39F5559E020C3BFDBD53773E00512DA9CA683277FD7F66D33150A3625BE5B37865C3B0184CB34AEDC8E9BD6ECC72B5B85BFD10A38D4D69CF91D2AC37841C4A232AD9067FBBE43A966D9089F3871D77FD9538852E5599113511922BFB2CEDFE0C9CBF3032961D41711C7928F2B0C72495BA71C9D4AD72B432EA1952B8961F40EF740B479057903C07DC545042A785D3C061C0128264CB08578B6904CEE58B56A570FF9CE0A9AE29B460CB9698D670A4F29B59870FB0330BB919CF96ABD3760EE48B5C494730AF78372F930A72C2A80FBAB75C1799CA5E976B669F755885992D1E98520ADF68FDCA4945747EE97FFF51CFD6AD0874DEF08291199B531E6CA0DB24F4F34C70B68B9FAB64D35D61A536A53358168CB855C4C9F4FB735B5F28F04050556D4767AD9A1B22D694DE04E72F4E55F765A51783654387F8E4980D24867A06846C52D7515098A542DA5F3C79A4EDF311C6FD279CAA283361A8D5FC100933CCFAD6D98097A9AEAE7E337555A47E73F5DB42607B2CC34827DDD1DF2C5BB58997130C7346E97FE9DAA5E1DA42D7C5F26F54E07ED57B79D13C14FB833E8DCE0EDC0F3A33C63F2AEB712FDCAEE3B7BB6EB526AFD9E7922E551B8CCB5A2CE33232D2F8CE2240398E3393BA5E80C9916E546453E247FF701FEB028B5732C72B07FDBC7632365C2AA87C379B35A5DA0DD9883C9C673BCCD0B881307D9D904EF219E64D8D8B0F007DD2687604EE45C24EFD9C831493888515994D0AD355D9EE5866BD46299B669B68395D52068EB9C6DA5EF8B75AD17A81E7992602781FF87DBA2F2D8D653CAF8DC10FD7D22C5360B4120C55CB836CD027DA03C0DE6095DADA8440E3D7A4184DDB3CBE2CFC10CF076DEC52FFF82CDB84C5703C2149BC4EFC64801028BE444FB9BC54314966D18AA1EE340641E35FB6EF267CD693AA99CFBEA620FB15A409615711989392B2B436FFF6958859A6E8EC15310D861DD9BE4138214F18A70617E9E9EBA7F0720B23A3AD3A4ABACA96F3272ED93B4564CBB60CBCFA9F2B515F25831C2CBBB8A5B851E4E8A3EF5ECC11E33BF9D718542E7097B1FABEA6A4C4801DC6AB48081EA7DA0D76056D13290006764E816078C315CFF54A9DF08A24DC98C37372BDC305EB4A25C0C6F51F84F48A7379FAB4A06C9E69757C763D9984E0545A013188F9978906C1AE6D218F9067E25F2DF62071F1D4DD183DC539F52D83EB27C4F58D7250DBB588D2FC734D7F95BFF2C9A770D4CE2684D38D605E55C58D4F5C2B2A5B023B7920B60F808A0B9FE1DC72EA826778DBE56C28487E808CD27E72363CA4D0357B5137B9272CB64D20762C3CAEFB17E3542E74CD34B372E37918F0132162F1CAC43610D7446D1CE5874AC062756A7A46707BD6C04593FBCFF511E84A88218729D5C6540E5810513006899A6743E7749373C834DBF62E9BCA0CD4C1AE74FBD4EFCE1FAEC0F037201592E3515A204F703C2E28C5D7F85B7A1F4203C7EB447FF96447096C62682B9640AA879C8875FA56B55413AAC911A44C2CC934F22FEF7D571413AEABA8729BED242FAD73BC61D6F5F62B733AABB52D860464D67E5E58919EAA28A7C89D0F3903D1387CB5862FCD491B14A94C79ABEA5511E90485FB2647794614F238A7ABB7E090F6A1159B9BDE8632EB4B371D33BD1FF37CCFDDD93C9158D7A5762913257D10C83EF64B2140092745D32838A8258A3888CA66CC64A94370127E9957F71215B554B32CB2A785FDE391E45CCCDCA8AB35BBE77857335B1D2DEFE31AF35799FC6A4C7D707D301CC25E76C8EA44B3C767CB19A414528AD2C7ACAA5DF013B8682FCF00EB30E19CE2E378DD13E8A9E3036E8F499054305C4D4207B939AEBF1981E8DB9E2AC12540BC759CEA6D027571C457906D6B4D438095D6DBB4414D9DC185A318EBFA1F56A9AD6C350FB6F35DCFD44AF0F794235062846E86E184EDC80F2B35E985D9334135511C39D585181E13EDD9C0908A14CEB30991162942D4D0A9417615B5C6D2792E42DB4B70C3F5DE61CC9D6917040D7ECD04171E3277036F791CC6454DF7779891F0AEF6B4399D45D106053A1BCE8040DF961C019E95D4C1DE0E6688B0CC3347EFBDAE12E9DDE2206EE1462F7B858BBAA574917F05B964B4738C416B644CC39C5AB8D46F5ABB8ADB4BEF03E0A4A2F390DEB997EF53FA653FFA7B1C1BCD9F2263E13A74FC65632B68D3D48480CC1A9722AA0C07C7B1490F925924411BF36B1A8AF54C13A205479D0C5255213771E466DA4EFB1A9704A6673FDF2C2B6A30983B8376D9E31CE932B9CE972BCBD971D70ABD489FBF0CAF1C692A07BF9070B39C63E1BD2EE0E8F1899A1EF1D526E29455E39CA9E78F3273EBC1EE1554E39DC284222BDF3A5E13C3AEF300C3166D5BFB77156844BAC42914AD894FB371949C613BEAC89296EE307E6D84583F3B1871CBBE7B718278501AC5727C94D08AC1C5CE19DEB81C46064495AD1D6D1E924EBCF1A0B86FD1CA3F362B67C244D3A958B42D2D286103A8C21B95E0246662B50ACE480EB3730088D17EF000ECD217021F240F98FC3B1387A45BE6E198626715A1A9FB205D0C5D12331EB3D660C4D2C030F5B455ADC17AF7F0E6CF71455DCB77B50AF36C12E89A1C75D13907273E9FCF3CB781515F74A12B9F8346332C5505063CB574189B7024B51C7E7C49FB453E1313BFF1BB31CC2924934418E546151DB77E30AB1713C983D8D89EE6D7F2844EBFBA8286784F11C27214351A35B2DC285A3D56C9707547583346FD4C14E14E32666C54305444484A8D925CBE89136CCAB1CE27E660445A9110679B9653028E34FB38793C656926EDF9D644797D87926B9AEA60A0681F6F99AF208EF64D1CD92DF602CE8EDC1E490F5AE549FAF4B6EDDEB0DB81DFA3FFA9B0CDF27168499ECC45E7848382B592EC708A7AEF011628CF70CE4F38C25038779787CF3A8BE8A723C5A5B6A61131E978C927EABA6C176E5146D221DE459913388528AAD65FF9EBC71BDDCF6AFE45DEEB32E6C5B38478FE48A9A5A64EAF27B56AE6B5DA53342837861D2D6BD342B999028B1E396CA196A5974D713B29CF7CE6B5466A5AAABE47C2BC9236C87E077CB38544AEE6D4BA869244A88D60E3D47AAE3108ABC541D3541933FD81AEC22F6C2260B6109AB1BE7B351AAD24EEBE5AE907C0B868847065C6551946F32B5B80D5273F2B5C23C7C98D3B613BBF6E1C3EE8B43BAA12135E1AEFCFB012965F1D2EF477FD8285DF94A337D0C020D052134CF665AF4156CDD272826E766C044E566C2DAC59A1A93CF5934DC08BD76759D208F06BD46EA75B6AEDE1FA190CA6171E13668DEE7EC260AB1DEBD817906139EE4CD1C4D863E4F75858B2263DB55BED94D55343F2703AA12A331C2F32DD4210ADD4BB44166BCE5A0D0749AE242AE16C00F82407D8452E698B885AD0AEE9E08570C3581DE6ED7C3A96A179F9C63C47A6FB90DEFD2FD76B8D196F674EA35344B9426611256FDF76FAC67A9E630CEDEF8CA17A84ABCEFB5B51B0DA3EC1A273F64C6A45ED33C35BFE3620808208A8EBB11545D64BCEF9B5E36D74DA19F3FC87C5804EC0DF08ADE57F8248A6A017DE55CD23C6CF7A78591A66432B19260EC506F6D5E721B5DD05E26BD35EBAFB5B13849EF7C1DF0DBE231BA6D232C13151243A822EBE762AB895F7440281F04215E63CA4BBD45C35BE4A26779C235CEDAE158CEA2B3A5A3E60879A7456454B6BF896D9DD91A1F1ECF7918963681E8DD26ADC37ABDC500E882CCDB42557D89839B388AD3B95439E2DC9965A4270DC6B422537EAAFADB614A92997B26FCF9F94C54A7B6D6273BA61398428CC715DC0D43C197D17646B37861E87B804196DB1F9BF0377F161B912D4BE2B9C7D7634B4CBFE425A5D7679BF5A884CA2E5A24229DAB6914735A3E22ACD9EAAA8D38BB837BDC266FB7690AD7EFB01F01E3D213E9771179C896214A87E8373C51FE33693DB43C13E5518B556A83B8381398E08C73B85FEEE96E2A2A368234F912D654B2AB7DBA990F439AF425FEEA06EFBF4606913DA44A963B9F4E839BC1F36B5D5E77916B9EC66ADF51416F71A23F7A00E52E7C062E9A85C611E9CCA3AC7D83C05AE484CA5B128182D59F6259CEF541559D6792367E39155C53A47C2581E7A55C12C18E31DB799158A838F898F8C722A132651511EDAB963EB6CE1D11ECD6E91354CA37FF7B0573D07453B5D164C4F8C7C0EF6E960154D1C472932B9E6C9FD00AC2BC390BEA4F35828AF36A0FDF5C7393AC869F9006CAD8B3670357E0F17229FD0E8EAC863E23170683170882F053A4C9BA3ED2BD7A7063E061B0B37EFB85A5CA263D996435461BBDEB7D027263F0083A53CB75F829256BAEC7361FFA9274166132C7A95918B653A1C7DC993FFC2EB213AB051EABB28E8FE9C2450AD9BD315119821359975AC17AA8434E057B064B209A12EAB0836BA8436B26CE55AC4614EC27E5D942C9BA9043BBED71C601BE94381493E003FEE1E3450981D42685E94F2E2EAE7E69A775E7B0588B5D0613F007ED9B195ED98256740A34E4EB7E9FBD69FBA8CAE59F1E49F2C844E1A4B1DA0020D497CD5202639EDD34B84595FBA7F9C711BD75ECA53919EE99EB1574AD5ED6418D96EF139CA0B88F1EF0A4CFAD69DC4B71B756D626D720DEE43D4893E51CA751B8B446DC5E8FAD653DE8D630E0E5051F0CE9536D97C1149AFD1D8D9C77590E0222667AC03B5CA2B742D8BD34E0A144E09679F42C3403A527235B1246AE9F2D2555342AD5DEAFD9954E56A826C8F75BDD4AF1B3FC9F81FF9915B65BD5B38AE6ACA302710E20715B8691C1863DBE78F4B098433B8721BDED05DE3B189A7073D3FFBB9B255AE89EF2E54F0DCF28C763A2A784FE25CE7C7F358F0D71A9FAE722D96AD6810D3404DD03B5A8F2A6493A57A45343F5F214EDFA8C51BF9606A9C0748C8D2C7FC3E7EABFBFBC2C77983AEA073EF300317DB625623E336FEFAF94B2D3E6E100E46A198C2602237D736247D4E87F43BE5C327498752889DC02DC0623A1F7132D3341BFD844EC83D30DCB16ED394DBF9D76A31C81B0D50F876F601A0B4F08BF8C256F02C6D539B779B087E139C5D6A57CAABAA953D00668FF317BEA09DAABDCEAAEF10C564FA288EDCA5F8483E78C60BC934BCB0F15B2B2C9DDDCB740F1EB9743BBFB391D4BC3799CD3FBB2FCB077C6BA1115651C8D37791BD29AD2A147FED8B43836D8D0F746804B30927A0F1A579BD869B0C747135072BCCA70C39B44252D14FD2E155E39DD95AF28615241A823779ED90D857381B10D9C73C04D60BD2006FDAC74F0BB173CEC5369D9A95F174A83DEA2691977FECD12CA5484AAF92FC7D26791953C3E3AB92917E2EC3B8BC859BECE8C511D815F2E63A60BD4C1F341A4672DA68561B444B6453C777FB5EFAF9331C9C2D90C2E04B4CE4E19DB425FC05EAC7F55BE3ECC6509C11BBAC8AEEE94A17CD2F343ED9FB60C6F3512891CB67DE32671008A61AD13550E1FFF9F60B8C92563DDBF650C67AF020A651CBD9C5BF178CA960403B84958C78EE8AFDC799D1245F0B97340E4A2F7CE8D7DF8969D8334EF30AFEE495E4FA349A100E994F431099B9E609B1CAFC0CA739CFA8C9E69D1F7BD6C921C43A027264412E89C01F0D1E1664CBE9FC963D5963D5EF2835CFB5DD6DA4A2BFFC33289146CD4768874F74FD8B8C665F667C9FB6158CCA7BEFAE8D16B5869CF4402F6E8BD19E6A1B1A549F43DBD83CD51985EAF96F2FB4148600E2AF9DC516366D9FF74A73E3972EA4AF3395FC7C7582D7B4EB44BE288895D624123E85DB208A7DC6E9FE019C369D36AD311DFAF78306B61C2FD1E193D0D174D84029A6768D1016EAE35B9F1BE93322D332F24347CE325899F9C3FE094EE72A301E7689DDC1903F88E691A2F96C2695C18194000A5F17544FD433BFD272D8E469D068E7986BA2C06504B3D5EB5426A4B339D2608EC6EBF690E446ADB40F78948F7B1B390CCA74A1DA33E9167F19E19999CE2358FC2C556C0BA15A76549B1C3034C4CCA15E73DC3749E2A91A9CF8F24DC5CF8E1F20A309642F9F7297F8ABFBF22BE7FDFADB60A19510C29121B50B7910EEA64A4F23C8860E5F95C73F45A969AD0389430BFCA6F55CDFF001D0D6E8B0D7668A043C3CE5445EEBDA7A25A3662B3D05581CA3B5BB850ECA3FCF95EA11594A9902C856BB2C0342C0F82B165C87745EB60B5D9E6005F9F7074080C4EF387DD4CE7DB037E9E39655F33069596834DF269A8245F20C09CD3547FEAD246E8BBEDDE33925C214765A401A35FDAF1F58F3D1718DF1752C41FC4F8B3FC5CA7D3B67DB07750A92AFCF2E935EB02414CF70F1C457E409F8850F731762B689CB1CE31B0F94DA4E40CF39C006BFF4397E3933F6DEC6554B956F392D58C575866F224C8A5829B4FCECC3495F7A93577E701F0FE36AAC26583438DA475B12ADA22C4F0EAED2805FD31A7735B056A211A9416B689AF9FE27B4B5A4DDA085D536251BB11EB7617206B182F739495E4B1C8A3DAFFC8B2853B3E3896AF5A5146747F391B62F3ECC482E5F5213766D5DBEE792F90C721F6B5DD7B69B05C6549765267A04E59841A78EA72F946BA4C186FED44310E3939116B0AD0432D33C508B1D6087E3D6FA2BED551C2C560574FB8DB5D97F655DBED2A713501773C705F8996F40F4A3C66C359288EDCDD7617020F7D4699AFD43360858EE889825B21E651B31526178735A580A0195BB8037176302CB88B13F3C6BD2B58A5442639A36EA2E5D2FB8DF4703FB565A0CF8C9B1DE97A2DE4BBCD98ECE7FB7B7B94BD72CD7A261FD8E6E3CB33EF800607B2F058A3F2ED89D9487A295819835EBDDBB9D34C5AD99FA5DEAE554E71B36DF356C6B91BF26CAF1A67D1F8E1A5392A53CD9AC2F9376153A23DFE13B41C24BF92BBEA74E3AFD76014EF524D1181B9A0B3659936B19896A3CDA49FEC5DA23DE4E86D1EA413FA14BDD69577E5CB4B9014CE8FFB32E595F26D364D93CE873001E72EF8DE897F92300587869990A711C6280753FA97EF52623D0EAEC735393BB38D5AB3AE65D0D9BF98178C85B1754C66C257A53C8CF5BF458507AE5B83066116793476DD7D8966009FFED58E1394337598C4537CB7375E0602BF27C963C09FCC0C652F77A8C61F8709BBB4ADA0713CC52AC57DC583C1BC584000891E517F6759152B3CFB7704F6D6924E392254F33212B33B0813618AA6F34582AD4010C4E7797B0529A367DB3BB4A4D8E3E87FF560F58211ED91023DB3C955213372F0081BF5A678ACD776889B0EFCCC0E5857F00901E6C1D356B0ECFC5D2509760E27BA8137DF7EF59AC641E88A0649370383F0013FAA994E91E50C3B94609277812188D7B9E2FD16F42D941BB587C60F45622A4779D41F4139F9A312BB5C903876BE8198238EE82B445DDC449FA5CAD30CACD68C906AB6ADB54A84F4FE2AFC3C343DB5A08F4582EACAC279649A4D7AE88D46C248777D52F1E7F85578096679987A814554D4BE207723BC6742A4064675A6A7A32D727B13437DF33C7C7E0837160B0DA460476D0F7D34495DEF271D2B02EFF3D45F00635514FC1CF2C9F53B72397A1F17DB038D330A282803054EEDEBCE13AA8AC71974DCEF3D8210CA939551691893CEADFC79B5BBB7D5F87822451DECA345F48DC2E23AA130671117D553135FD51FD26392EA0AD68C498A166902AB76965AAB42E15A200BC79D78ECC32F724C8CC0160B89EEE94A837175DC6C34FF9F92851403DE5DBC6A8464FA8EC86DFCFD372B9343228AA7D219C5C3F2B188DFCB1DE415C78514931DA5110EDEF1BB5498C6770DE1AFCAAF3CE29CF48B6057B2DDA743DBBFB594FDAC9A2959D953AEE9B0BFF9BBAD44C82CCD61097F4D906B0634712DC7E35D73027828C7B0C27A4D4521C72B93BBDF0EE34A70DB709EE149967439E546EB2B3517FCA6D19F76746141DD13BBC5683B0B0C0EB055C1BB29650FF9A5CB76AB28D17A8220AF56C188D19D96E8941046D56E9F08B41748EF0D3E797DA73CF579542A04AB08E3AECD25B10943A95F62265D70808ABE6E46E9AA86DE486153A997948C98329107DE61477A667D256D3CFB176FD5CB225218F3F09266167C9912418297C3317CAD881D1CFA1764DEDE0A035F3E0A50A73AAA8AE6E9FA50F00D74C724A2BECF30CCC156E707FF38F2365C9803C5C3C06E70D5FA9A0C1C5CDA5BA6F5B304373CF73B182D493413A375572A04522D6C23D048CE2B4AFF7E7F9BB9DE2151528FE56F9FA307486320698E7140D24B4D4E158796B817DA71A542D9ED15ECA2BB0AD57C6722B212FE2F29381ED6881BE2B1DD2D6CE585264AD3DDFBD4F91DB6735379417F63488C525291BF952E300492291B6CD9AF95697AB8812896660F30F4076CFD9864F928A3C9DB4270170155DB4098EC494044DC82FFB5D4BC67C1061F4D3E40DC3AE58D6410594C89E2A638865354B7DB96AED5C12E07EA42EF98C5D46DC552B9D12EA387EAC9A183A8166972B5D7970924832B175F5C633A4A975274AEEF9FB9936767B322BDE8E36170B1D1EFFDF20973363D81F23F9EB51500157F4257F91D80CEB2A9D83BC15423E933FA66D5EC3075DE4736605AC1DDE796EA606496837268B76A4252EF3FE985937DB73A671B0228C6195DD91AD58C9D748DA5F566A56454462A2BEDBBD2F34F85335F7A0377486BC77B8AA3E2291AFB339DBC4532E6F44E35BE073D62ADCC796D3A3BDA820F663AF54FDB057085F160E8CA46EF335885B61BDA1C22294BC355A9AEDE29023FD09D60BBE6DC8CBF7FD5ED57764B6629CD0F5CAB48E977761B92AE92F219283323BF5D21BFA4C2DEB67195EBC3CE5412A091212D1E177697FD1FCB9FD0AC4725DF25F0227D085BD0ABDA9F1E5A1C746DB6BE02FB92492A7A0B982B47E86D2C47135B0248AF8CF4C0FDB93810FC0DF06BBAE6F22272B3F9B8633E0FB2AA98FFCE6AAFD23CB7409130C796E62EAE581A2DEAA2C9034E657A4F382EE291DA74A853AD0D7C39F21ED553D54EB027382A3D92B5CAE0C1AB354D4BA18B9213B6909B74602BEAD6114C35C05355CC66653C3B04145F24DACC7E44CE2EAA221ED4E286A3C5B83EDE2314F050D7106BB523A9622A1773ACA7A0D5C44547FE309555812D31455108E98BF0BA97D1BE88B3EA759FDC5304318EEEEFB2929241297248C194440C14C48E28769E8E0F2F7DE4FC8B9A8192B5D43034360E48F3C859B64E7781FE8367FF2D7C9DD3C4B91E2354EC44D48615C58A25BC2FA9B5D2FB88D3640EF06BF1B8006CF2C522355C43D6BC900578E432C6CC978BB7BC74B9BEEFA73BFDF99C2B762F70EF20571243F4FCABFCF6E56639880C0C662CEEB7CC1C00F893291776E2FBCBD2671B0B2B505248C76A9F20198FFE4D9AAF0589D63DF8CE0B00D9DBCB239D0A2CAA23126B1D756D7FC69A5577EE47E847C1FA8299DD13C4798465CC38F297811D3B1513B97B072A636D0C5BD55D8AA9B81875E044ED4BA4BAFFC3C35DBE243A6D00128160BB8DD89A728D7C07DDA31D2742852328C66CE7295CD6E62746480961F117E99FDAC0BE2B5F12B5FFA53919639EC57708532CB2ABF321A42741A1EA46679DE959EEA6F53F45834C6A821A3C294E1FE236485A317F7D6ECDBB0066DE38E6A464A8C03F04E8B80AF524529C1C81E3B35E136660E06384E11093D8B8FEFD7C05DA7BA46DDB4CFA3A251601B5D7ABE73586564C14CC923B198CE7AC6549D4E07EBC198FE01A84940135A34CE1A72A98EF6B61EEB51983D2A5262111B95443FDA2134A48437B931CF1BAF13923B47FFF93C27C620189296F056694612F54B15A55259685FD019615DB7655773C56570BEB369DBBCF596D7DA70842304F72A3A7DDAE91747655207631DB75D345907EEB1B8C62D6DEF482DE59A99A2D4A945796F7259B4C61271AB640909F9D21C68494B1FBD66231279C6C2B16315397D493E71E46F8D9671DA6DB3F05274AB61125F824F1982E69E8DB3501F70932D19F68DFB077D799DED1C37C489BD2F66199D71AF4BDC85BFE78B1CE9CDA9E48AE893DB5C7A46066E78FA34E51E77EBB69D25B390F6E3D920082E9C10DF2950FFFB6AA3F9AF162BF1A4DF6993BC48BA955BEF6966F195AA49E5C948D1EA8724EF5AFC6410EE027CCC63B58D84519D1572D5F4031DB5B412811E98DFD44DAAA0CC715978A9A6B641240362691BFB4968D903D78027EB96CF4D50A9ECAD43E3254F538E90539DB4D9844A5DA17EFE1E98A09B3E17B1CB8440DB428D21D2F1FB2D7E4C42C8ABD592C3BE12503FCDD98492096654F662F24C41447687DEF844C8773D92B1C3CFEE5DA71E1C5096AD5BCC8F6A5D577AB3F06524369A28E2CA2717BC76AE4153295BC0D91B688B369FB4907210F7AE75A884D701C0B675AEA33E6E630AF737FBC20F25C9E3355751ECF8DDEC68538C8166EE44D0436EB3B133D7B08CC5A1D6EA715015D185FEF742936ECC9968B5D58F99C5D2C288DA669984EDA5D452EDA65CC3825F4C93A0CCBDEA6D5E261D34286DCE1A627A833E8B3D06B3EA9A171871761218A237C11F5FAC988B0C245253B4B2B30DD4B232FB140968EE6B3D938DEFE95855CA39FDDC7E53F125BB213D0DD719D1FA2CB269D0B47D4F521602DECF0C9254C78C24DD8D31A75490E81D66FF9E56EB4290657C80470AB7F40B64C3B336F76791CC83B38BF46AD95874637AB4B9FAB6DEF7A4850E1FB9615ADAF18A0F135F9DCA2A92CA08E4E4E3B825088E265CF88C95E6923F3F2AB840FAE8E5963FACFB4CC4E34A3B24AC72961C4DBC4ACB240B36D6BB639D19707D9199A7E138FFE2424B29AF3759214C3430CBD599600DB12E87AF9A71B495532D1AF0E9519185851651995E7BC711F5F0656927DE36278D19E4BF50236C92049DA3CCD2F5447710BB43973250B7AC2B7CC6D6D81980A764326DE40B7BD01F225BBA073BF4AFA8A20F3EAA1F0843AB2F333E69C0B96454FD4D4F4D83DC1323AA32D1D3DF55B9AA72F70743F12646293397952094ABA8CBD3DB1213A7D6CD842D9FDEE6A9DBB2AF983ED9EF9DB1E5072AE4E056577B9328B1B4D88CABDD5157640FDAF8349A58702C56E9E94CAEB9C9459CA34DCCA93C5D408690DA34E6B4540F409B9185D7B1E659BE2AFB743A2704B519D0C9AA24731D2413F71791EA7B289A9E7D1A94355E8B59AC9FAEADDEE9BA4CCCE8B40B93449801CE5BE3E27D3070D4439AA021B314A54275AFA3AA2C7AD71C65133D1F9D7B6EC5448AFE152D3363055538A60F0070E39D9AD566DE647A62F6CC6AD44B008D5B1922F952F505371083DF77F2FD591272CB8D7E22E5A3995C738D4A727BB53F066AE4434A979383495636D0E22E1B27BABA0DB3ED6F956B1870C728650580E5853164E1333E9FCED60D7F4B2BC87C9961A582EE1F6842ABD4B69F9D713AC31E91759315B49DC41BB3F3F9A4868438C0D53C7EFBC9E0B30A85E5865A464D178EAB568D7ACA88929170BF4C04220C0F5FE157A69EF32D2814CB22207D4FD3CC3E653DEDE642D44FD94AB9731B7CB97E2552E8E6F31BBECA799F785CE688C9966DF19980148E738317E5C6399FA6C6F42D31AF394FD1BB9E05C99FEF8D1A57B07FADE9F2699E6CB7BF5E06761A3D8470C9FF1138A8ED8397C7AE56ADE1C35919D5CAEF271BDA2834E419F5C05DC7A24E8A9CBC8F4F80FE00F48B36A97D6B6857202DB3ABFE004425E42E93FBE31D33249D3ECA816A3D83EF1E26E879CB63B5A5DA08161E9199C5C61B568F151B9F15D9022AE44F8FF590BDAF98214EAA5C7A9954CDF9F01BB6679DEA6E5DC7FDF2EDEB05C9605313C1C737219DF64E0EB038E9567638032CF289C732FA174B06630969ECDB327D5D55A4984E654DB582E1C4F1D1816709F5D3919EFA6B2FD79A99DE11C221A75A91E36CCB2262F7BD5EF7571D6BBBB530F0CC4AC77D5DB6A4F289B27CA5929108E83BA7645AFAD070F039980436B17F16A0D1AE28D01DA9D326275BD9F8BACE0931F9B9362ACAC4209BF5535F452BA816BD6EE3426DB669D812E9300685C31DA5338E3062365A9E0A43710C911CD83CE305C84C5C5DD3459207A8E3C5DF11169DE8B5CF4D8F11F5F453F8EFEB1E4564B40841020B77A815C45D96D410C9CA59533E004DAA510560CD6F7D4BFB389393A4B24293ADA930C3FC65B2722B3E8974BA55786989C307510BF1D94A4A77223851A70BCD8CECFAA8D79B988B04296D0AAC7C5AD8A77F10C84F63243690A35B5B57821144127122FB0CBC47628E0568B2A836ABE162552A0B2155545DA033B3DB6576B01DBFAE23A8BBE45F9660ACEBFE73F6DE4375E15C15282F2130C1DFEE32B3BAD0B920A138CEC69A4D7E65A9E4EC20A126B4F532E36FD969120CD55119149EA755303BA15FD8F5A7FE0FF2771BB7ED1D8EB46F458824D5646D0F356990BA94D5A40EA056F354689CDF4217AEB19CCEED01E74C2B8CCD5D7A9EF042A04D91A0EFDEC34B9F39669EFACBEE4BF9E9992C3293FCFA093F55ECDCFCBEA16C29B6A64986FD366569FB9FFB4791D35D55FC88BEBE28F23BA47194E82042EC272C6855D2CE80B4E56855D9CC2CCC058D52D2EE0F80FB1CEE437EBF11D5FEDE1AB171604EA7DBE217566525F9F7698AE9A30E474D941AB36E4B2D10241689AB2E537D1C556ED757BD6CA64ED5B7AC2AEF71F25757D50FB5004B15701B9B168EA34EA0A0E56DD6FA3A9FDAE48DC6BAABC3F4EE017BABD97706DE638D735BC2B7239D8553974D46984E8772C2D920DA537205E2A380640188E3C81CFE7C1BDEF04A94CA06497AD13A83683459D56B84AAB565170F03ABF4AC27B31FDF63787F11CB8F5CF44AD1D2DDB91BB96FBABA079812F9F8BF0F401EE16A1431891847719371955325243048846A5B6E7BF43CE84CE47D9C49DE3C872A2ED2E66BE867743D11691D1A2D09B645194AA4968D24704496261489D1C56EDFA9371C02096B968DB9F0AADE782F21A666C76FF8092BADEA8AC96610D16592C03CC43A87798AFBB0CA35C063417A76D9E02D598BA1FD98FC38A89647B6190734520C390E2D5F85A2C0C866EE2FE061206B107173AF8827A5ADA29772C10466FFF5A0D94692180DA496E9E17B69689BD321D69E677AE9B590AA947DFF0AF5769A5363EF48E53CA08A25F4867034F8C3CBF6F67BC8C9EF17F96A8540C9ECAE9977645F5332B5E459B754740B3695137BF6D6B229EF48D6F1B1663EFB37E8A3FB905936A30B17AAA1A8E1B5161AF6DFB3F90729A2D4CFDB96D66510506D9E5C22D6D42E4D1781CA3CCB61901CF83CB806792D2B67B7A532B341D14E97E20EC4EC33BBF7EB007792F4A80FE2EB8BEDB9B438E64D4C2EA74E95B714116F69E14945A239DA1460E63BB55A35370E494B656586C5F0332BF07C6268D3C782ECEE4C7D3F287FF900ECE0C846918153203D5481CEF05BDC17861B89DF0FF87C4842BFD4C1B36327CF1F50547C65156640073E8EED37F962F89F4AD4BBE0DC906A2838FB4B1BDAB16ECEADFA6DC4CA305C731C3FC501FA585099818472485BD33C8C16FA29379E9073C3E04FBF2C619F04D53C0908CBF16523CE735B55BF56C9EE9813996C30CEA368BE8CC65B05BD9DC9212CFCBA9D9568A96ACFD95366C67B8C7F95AA4F73A0A5D8A220F72013432950E861BB761FE80CBB13FB3A3EC59E099154F28E52641952E96F0E3B93B421012034B94FC7B5B11B3CFDA1F64A82EF3B971F7ABFEBFF494B98F38BF0CF0B377786711D72D6AE9786AA838F940F6344BE3F9184FA3B88572AB6BB9583787DB8AE88D644A2E12FC27DDCB9E1357D5873A950CA4A15DB1983C9B20F4CDB2DE44444537052ABC38A3ECB2FAA095DCD2EF0916E4ED44BD56945A9958FD62635EC70EDEB07208D79812C989618858EE33422F28578A8ABC2A6A90929DB58962CE6A086354A512D39F84CB3A2615CEA153101DC82419B05EAB1F55878A4A439A8BC7D3026FBB1916633376D98868B604B6EF301C08539CDC7D53B3EFA00A8270945C77B104345FEF825735B4F372FE2D7F6A3EB91237AE8C8A66C765756A93F29C731395CF08255126A59EE1A28BB4892228D4A7B149E086A9D5D2AF1A4BAA9CCD35D30929A93B37DF0F218D4704DC7F06C2CE84652BAC37B254A609D60E727E0E725626A01B6BD8EDF1E77F5E02A24351AC2540A83F52F94524F19050BCA21CB9BEAFAA6C4327625F35A04CC2FB22D655F44A714105FF8DE32E0919431513599780E0E24BDC10E247144A32B033588A14B394B047E5FE792EE5853C762AF8537B108C947FD87662006D4E3C2AFAD60A57082CADB5852244E78D9E49999F3FB3F9CEA69E114AD054F29D98B84FA474D862602F14BC546264EE8B7126BCFA2D79CD9EBAB680599207BAE816F913871949204BCF6FDC5393684658E6DD0E45FE1A41E5B46B3496202DDF5C9ACE50ABC96DD4307F967DE771817E2B4A17CC3FDB448CDF7C3BD746D7DDCCDE6CE3AFA2E56D19BD5CEF62F84AD7FA78B6A0526271E2A084BF9049095BF2D911FBE2A549D15F234758C5EA767A827A389F79C8B48E3BAAFA19E754131BACC14FAF7CA209CDBA5B53A9470603E28CD2FE6B18ACEEEE4E80C79A48141EDBF8A71370F847E2FA4FDB0940BF75D3AC181B73B16943170DFBD146B74853FEB25E12BDB37C0DAF1DBE9FA692B35F4FD7B728A842363264048E9D413C85A5B480247D72816C2EA4E7025DCA1B0FE642D0E74C9DFA7E70DAF6C0F99FD226219193B414AB5BEC3C50736F48F5BDFDD477EBF526670F8CB7F12A296320040FF324E7615C13DBFF042B6EEE44A950A1DD583133FA712D9C41DAB5AB993FD688B319058C3AEC01FAA4B5578EE6A730AD6997C886453A10F43431558E05B678C3C415B41E14EE3C4341F6E1594C1406364F569673B0CF4BF6348D21E40D86EDA4B0FB1C1A6692CD31FFD63932329E7507DBEC819EEA2E201C34BB0B07D3B7E5A958D6AA2B0FA57D9B945D6306A1F86A67AE67F05DF0B20F48653F48183A9FA60C6CF4B74B376582FDD270DA1D4E140FA8ABC5AA0BC1722DAF07190ADA467949F63480DC6ED439F48AEE3BDCB48EA571823E53509D696DCAF313DA8D4F69988B869E53630AE05163CF09BD1EF27B86CF6AB5E31B4FCC2ECEE0C5CCD8285B9BBD6A33BFC36823D05345390043D5B2313C6F3E5F39C5684E84CA4AFA4B3182790ACD27F195CE93F7117F880FA3FBC14BCE9299AE3C49DB34D440ADD364EC71612486DB1CAD671E812146B55DD6247B7E9F6ADF0D80DC76021A6D03B21094ED007E58AE5BC62EFA7455F19FF00DFFCCC99B1A751032E3953FF000BB004F74907D7D69C5D19D34EDCAFF0A2A5A0511D214E03DB1F78FF009D739AD6DBA780D632E0455F8CA66D763F178B7A534948BD5B989B9E3EF0CB6AFF00F58FD6B3BCAB5592E0E798CAD2159AEBFC2DECFF00495D83B102367CAB132D2D1636951BCA4380FE75631F4F4B8D3D2E23948344597F510663E516C9106B5A5B26BB712A0938145FE159E9568F19D63794B20294B6CFE053469753A461F136084579334678A39971BFFD92875C2E37056A6DB1FDD0681B4EE9045BF4148BCCF4ED096C904D73F659D007BC5979DCD332EA7D50899D4A94CA1CFE1A565239A1ABA2B74DF307AD763A7ABCB551F11AD485312B1D8AA93252DA064A8E29BBA6AD82D3A0DA640016E0C9ACFC41FE9AA4F6B9B08160EF51AEA20E9C4DBDB5614E72695A803C9249EF46787AEDA33EF37D12E2ACFBCE07EF9AB9D28DA9CD4ADA53EA68FB7F4CC2ECFB0CBFD66C08EE2547BD76E9F476E55D829EFB89E4E695B1C6909810FD085BAC35CB50A2A6D1056071838A09B66B09B66D47E734E1536B3FC56C9E142B0D26931573DCCA574EE5E7D6352DB728379B3A27C073736AFBC93DD07DAAF2D765FB41B21C0427DEB2E54E0C5CC361C188E55CA32B850DB46BA71A6E774EA5A5A5056D4E6B6D48295827DE1B7290B981325925E58F6355EB642A400A1EB4721E210867A9B110D30928C734DEE84C828B34D8C4F046697789F568DA0BACE688F2E85E926DAD4FAA3A812DA04458C6DB109EFB9585BA47FCA109FF009CD1CDE6DAFB50D290B5796B47292780A3C83FAE2BE6DE23787D5807D001FF008CFF00982367CA51F102CDB112AE4C339C92405FD0E6B597483493F66E990BCBACFF0012E0B0A3FCA5283DBFD2977883928144CF4CB97998BFA4CB47CC85A3F446BA647CAD4995689041EDB825D6C9FF00A562B1069846A6D43A95AB4D862BF3253CAC21A6C124D7D27F87CA1F07467FE9CE7FE4C7FB15941335D74F7C2CEA86F483574D5D7C1164B98222303794FE268FB5D741D3D3AF0E32B5B5CA73AEB636371D040195A8F735CBEA7C446A35216B1C67130ACAA9332B6AFBE25A97B76E7776A26E8232E9F109639DB48C4A4E4FE35D23AF97A527DE62F766AC4D89AFF4822EF764B0B6F290A0BE6921E25B5744D11D19FB161AC21E711B48079A4D4A79DA8448B8A6EB409845335D5DD95216A254B5649CD5D8743EC05135F45B57188FEC5C625EE92B726E1A95008CA50734D093B198A54784329AE775CD9B42C55AE3970B129AC263976D48E2D2A2529240A1D194A4A08AE8E81B6A0B1BD236D6049D06C12275A9C94D82426A5E8F6D4D6AE19EE93CD459606461ED2D69E832E35BBA64480906A369D9AAB7405A9BCEEC7A50AAB9D38582A0FA389452243F3353A9D7544927D6B94B0533B19E68F000C08500010210E92D492B4F5F132104A9A3C38DA8F0A15A53475F2C97ED2A275A1C18C61D6C9F9907DA94EAAB21B70ED14EB2B39DC265B9CC05B3BDA3FA1A20E9FDEDF82C4C88B24A54D9EF44DEA2CA0830BB06EA8C868B9C77EE0EA1640254715E1C8E7CCCA4F1DEBC06CE0C8C159C64152B0939E29A1D115117492D73828A07C447F28D06D57E899B5ED76CFEA7F8704C1434853823852C94F675D214B3F8E558E7FBA2A89C96F48D34B5ADC5296A3B5449E7E95F212DE6DAF61FF7416EE938F612BAC76A6E5756A0C5686F448712A38F72707F7CD6C9B0B0B54262DB8CB4DA76A4278EE38FDB3586B189651EE27B4A392626FC73E84B86ACFE8F1BDD9ED36B1324C7BADBDE65446E534B2EECE09ED94A8E4FB66B3FF41BA4B6AE9BE9F6E2A90D3F799042A5CAC648FF00027D922BA3D3EADA8F083A71DCB1FF008E3FCC656D9E5D404D3D02DC9088E81F32558C7E34B6F1DFD44B6E9AE80D83A681D1F685D1E44A5B60F28691EA7F138A03C2EB6BB54ABF3FDB98328E9330A6A287F19708EA48C820134E1E86DA4235C409011FD93A957EF5DB6ADFF970B0173D204D8FAE5F45BED42E78E10D6E3FA57E67F899D7EE6ACEAFBB19B7CA9961478CD7BC1E9DFA90DEC21BA75DD783ED12C8CF983157D0893140F5AED6DED1BDBDA337A7D6B31ED8A96E24EE576AB0D757445B74929A0AC38E0AE55FEAEAF1F31039F375113ECBBE6254A572A26AB5EFFEAD55D520C18FD460C63687F295D3592829055CE283E0CC440D50EAF38F9CD2FAC16B2C130CEE2CB3B5DEE489477E6AF743DB5AB95A64BAE7210926A6EFA544AB74550526A52C6AC7523F9558A84EB81DBA13F5A3D3900FC42947199D1C742084A4D5D696D6F75D27A91B996E78E01C38D93F2AC7A8350D58B170655AB0EB8338BB165C0D42203E8254A50481EF4446C9274EEA795027B05892C12DBADABBA4FB5076B8C003D4416DEDC7AC06B815B37C714838F9A9BDD1CE91EABEA5D99EB8C3421B84C1292EB878511DC0AA788EA6BD269BCE784BA065107354581DB16B195699180EC65942B14C0F0F70D337AA020107F8A529C7E2714BF596799A12E3DA2CD40FA644DC7AC9AF274BDCD091946DCA0FA1C2873400D859D3EE3679528850FAE2BE43A73B909F9826A3EF32FF00A5700FFB4E85254D79AA6E41560F6090839FDF15ACAD0B8D6AB7B4F3E4E5585958576C706AB6906FDC7B097D2F0B28FAB866DD7C39EA19ED2FCA8E186E4EC50C956C5A707F7CD655B2CE5317453A4E7079A3AB667424F6C9C4B6A492563C3A6F7466F73E3C37143721617F90AFCEEF175AF2E9AC3FA4975019AE39E5DB257D9EC214784251ED5D17F0DD41B54E4FA0308A3A90C84CA5B761B05582A2918AD01D12B4844865E29EC4734C75870B88A1E690D50635D346AA23EAC256C1428FB6535F90DAF1B7A3F57EEF1DF51529A98EA324FA051C538F01C1DC63BD0E0E4CA48E9CBD93D8512E9B8FF1D7A6E3A471919AE97507084C36F384263AADF1D102D296D3C042726947D41BFAEE3AAD51D2ACA1BE2B9EF0E4F32F2E7D225D12EFBB741FB7365E5948AFE95017F1678AE87700D88EF761A17E937930F4AC86967922816E248BD3AA1FDEAC34E3EAB99955FA8D2338EA9431B8D31F41BC2268692E67EF24D7B5C3E8E3E67B55FA701E7A8BBA85E7067E651A84B3E5BC49EF462760210BD809F1195AB767B57C4AC7C582AEC0D5E5E6BAB074AEDF77F115A624BD11B7D0DDD1871D694321C4850241FA714B8F118EB10FC696A68D156148F8AC923B127FF8C572B4586CD5043E8A7FB88A6B6DEBCC5222D8FDEF5747B7444153D29D4B481F526B77D96D91F407472DBA5ACC9F2845613E728775B847CC7F5A5FFC4B6652AA7DF27FE219636DAF332C75BD66275E1D73D24B4874FE268AFC2FB9E7F8A9B2C71FFAF2100E3E873FE9465BFF0049DDFF006FF881BAE504DB97D0658956EF333E7F983683C2483C7EF8A0C6D90EC31B53B529F97F3FAFE75F23A0E122CB392617F469A47FB4E94A74A71163EEDA7D772C7FA0AD21678ABBDDF0A5E52D2C632D2011839F71ED9ABBAEFB767BE213A6FB649EB5FC1DBFC2EEA771A4E3CFB52F68C6024971031FB9AC330E6144C53593CF34ED95558AAF695D61C158D9E88C971CD64FBBB8E1B46C4FE26B0B78B680CC2FE943D6486061267A5DFCD4DA49FDE9D7F0E1C6B6C1FF006FF9137D21E8338DB4F9AD4539E38AD2FD27B84783634BAE100213B89A3F5A331559C18C399ABE3CCE9C48B936E65B4829C83EA2BF35FABF1528EBA5D1F6C612FBE5CFD698F809DB61119787B7D4220FDA2D2F4D730814CBD13A49501FF8C7864FA53BD7DE150A8866AED014AC349CF218B03AA51E48C0A4F5E6CC97AE0E3F9E54734B7C39B612601A36D84990ADF1FE1651F5C55B5BE3227C85820714DAD6EED19B37399C263860CB71841C02284A739BA6ABF1ADF4E33CCD691CE64527E6A61591419E9C6D07EFD4EB3EC03E646ABED03E60FC9888677BAAF5E6A81F5EF924FA56B51CF335A8E7992BCB4B568DDEAAA839AD9799AACFFFD91A79ABDB] Extention=".jpg" link(onCreate,6355812:doLoad,[]) } Add(GL_GenTextures,5983898,231,56) { Index=1 TexFilterMAG=1 TexFilterMIN=5 Anisotropy=8 link(onGenTextures,11174216:doBindTexture,[]) } Add(Img_Loader,6355812,105,56) { link(onLoad,1626606:doRotate,[]) link(FileName,14010154:TempFName,[(111,44)(90,44)(90,100)(69,100)]) } Add(GL_BindTexture,11174216,273,56) { Index=1 link(onBindTexture,9346793:onEvent1,[(345,62)(345,27)]) } END_SDK Add(MultiElement,7274590,238,245) { @Hint=#3:Фон| link(onEvent1,10714674:doWork1,[(303,251)(303,132)]) link(Data1,14496503:Var3,[(244,233)]) } BEGIN_SDK Add(EditMulti,11728578,21,21) { EventCount=1 WorkCount=1 DataCount=1 Width=209 Height=151 link(doWork1,1260393:doPushMatrix,[(28,27)(28,67)]) } Add(GL_Translate,11806612,77,61) { Z=-5 link(onTranslate,9982782:doWork1,[]) } Add(GL_GTools,1260393,35,61) { Point(doPushMatrix) link(onEvent,11806612:doTranslate,[]) } Add(GL_GTools,16293158,161,61) { Point(doPopMatrix) link(onEvent,11728578:onEvent1,[(211,67)(211,27)]) } Add(MultiElement,9982782,119,61) { @Hint=#27:Плоскость для создания фона| link(onEvent1,16293158:doPopMatrix,[]) link(Data1,11728578:Data1,[(125,34)(27,34)]) } BEGIN_SDK Add(EditMulti,4313673,21,21) { EventCount=1 WorkCount=1 DataCount=1 Width=531 Height=221 link(doWork1,15522232:doEvent1,[(24,27)(24,48)]) } Add(GL_End,5982301,476,140) { link(onEnd,4313673:onEvent1,[(533,146)(533,27)]) } Add(GL_Begin,6022708,91,140) { BlockType=7 link(onBegin,15523854:doTexCoord,[]) } Add(GL_Vertex3D,1719876,182,140) { X=-10 Y=-10 link(onVertex,2195857:doTexCoord,[]) link(X,7488293:Var2,[]) } Add(GL_Vertex3D,10484743,434,140) { X=10 Y=-10 link(onVertex,5982301:doEnd,[]) link(X,3381000:Var3,[(440,114)]) } Add(GL_Vertex3D,11705368,266,140) { X=-10 Y=10 link(onVertex,5182178:doTexCoord,[]) link(X,7488293:Var3,[(272,114)]) } Add(GL_Vertex3D,13395140,350,140) { X=10 Y=10 link(onVertex,6810048:doTexCoord,[]) link(X,3381000:Var2,[]) } Add(GL_VertexTexture,6810048,392,140) { S=1 link(onTexCoord,10484743:doVertex,[]) } Add(GL_VertexTexture,5182178,308,140) { S=1 T=1 link(onTexCoord,13395140:doVertex,[]) } Add(GL_VertexTexture,2195857,224,140) { T=1 link(onTexCoord,11705368:doVertex,[]) } Add(GL_VertexTexture,15523854,140,140) { link(onTexCoord,1719876:doVertex,[]) } Add(Math,2682457,182,56) { OpType=2 Op1=-10 link(onResult,11402705:doOperation,[]) link(Op2,1950719:Var2,[]) } Add(Hub,15522232,35,42) { link(onEvent1,2682457:doOperation,[(123,48)(123,62)]) link(onEvent2,6022708:doBegin,[(70,55)(70,146)]) } Add(GetDataEx,7488293,182,109) { link(Data,2682457:Result,[]) } Add(Math,11402705,350,56) { OpType=2 Op1=10 link(Op2,1950719:Var3,[(363,44)]) } Add(GetDataEx,1950719,189,39) { link(Data,4313673:Data1,[(195,34)(27,34)]) } Add(GetDataEx,3381000,350,109) { link(Data,11402705:Result,[]) } END_SDK END_SDK Add(MultiElement,9906668,483,126) { @Hint=#25:Вращение объекта по оси Y| link(onEvent1,3678625:doPushMatrix,[]) } BEGIN_SDK Add(EditMulti,7375376,21,21) { EventCount=1 WorkCount=1 Width=195 Height=137 link(doWork1,7874684:doNext,[(31,27)(31,62)]) } Add(GL_Rotate,7147066,124,56) { link(onRotate,7375376:onEvent1,[(186,62)(186,27)]) link(Y,2471183:Result,[(144,44)(116,44)(116,100)(88,100)]) } Add(Counter,7874684,40,56) { Max=3600 Type=1 link(onNext,2471183:doOperation,[]) } Add(Math,2471183,82,56) { OpType=3 Op2=10 link(onResult,7147066:doRotate,[]) } END_SDK Add(InfoTip,9351212,21,161) { Info=#34:Выход из прилохения по нажатию Esc| Width=113 Height=95 } Add(InfoTip,14518825,231,42) { Info=#109:Получение "зеркальных, металических" бликов путём включения режима генерации текстур "сферическое наложение".| Font=[MS Sans Serif,14,1,32768,1] Width=470 Height=60 }