mirror of
https://github.com/ultimatepp/ultimatepp.git
synced 2026-08-25 14:22:54 -06:00
Merged master
This commit is contained in:
commit
c0cb4bcdc9
87 changed files with 3406 additions and 2068 deletions
24
autotest/CompareStream/CompareStream.cpp
Normal file
24
autotest/CompareStream/CompareStream.cpp
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
#include <Core/Core.h>
|
||||
|
||||
using namespace Upp;
|
||||
|
||||
CONSOLE_APP_MAIN
|
||||
{
|
||||
StdLogSetup(LOG_COUT|LOG_FILE);
|
||||
Vector<int> a, b;
|
||||
for(int i = 0; i < 200000; i++) {
|
||||
if(i % 100000 == 0)
|
||||
LOG(i);
|
||||
int q = Random();
|
||||
a.Add(q);
|
||||
ASSERT(!IsEqualBySerialize(a, b));
|
||||
ASSERT(!IsEqualBySerialize(b, a));
|
||||
b.Add(Random());
|
||||
ASSERT(!IsEqualBySerialize(a, b));
|
||||
ASSERT(!IsEqualBySerialize(b, a));
|
||||
b.Top() = q;
|
||||
ASSERT(IsEqualBySerialize(a, b));
|
||||
ASSERT(IsEqualBySerialize(b, a));
|
||||
}
|
||||
LOG("=========== OK");
|
||||
}
|
||||
9
autotest/CompareStream/CompareStream.upp
Normal file
9
autotest/CompareStream/CompareStream.upp
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
uses
|
||||
Core;
|
||||
|
||||
file
|
||||
CompareStream.cpp;
|
||||
|
||||
mainconfig
|
||||
"" = "";
|
||||
|
||||
8
autotest/SerializeVectorRaw/Etalon.log
Normal file
8
autotest/SerializeVectorRaw/Etalon.log
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
* C:\upp\out\autotest\CLANGx64.Debug.Debug_Full\SerializeVectorRaw.exe 15.08.2022 15:25:04, user: cxl
|
||||
|
||||
byte 97f76bb0 988afe60 34f49fe8 72d7e5ae 9694bbdb
|
||||
word ec13291c 9dc98935 6c4fbf6d 7e98182b 0f2bbfb9
|
||||
int 9a7851e3 2916fbdd 11079789 4e080226 05c5750d
|
||||
int64 8d3559a0 592ba8dd e249bdf7 4070d000 3bcf3097
|
||||
float ef8b992a d20396b3 bb1c026c e9875e39 de667323
|
||||
double 9394c77d bf514767 9d22ab41 49c3081d b4689d9d
|
||||
43
autotest/SerializeVectorRaw/SerializeVectorRaw.cpp
Normal file
43
autotest/SerializeVectorRaw/SerializeVectorRaw.cpp
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
#include <Core/Core.h>
|
||||
|
||||
using namespace Upp;
|
||||
|
||||
template <class T>
|
||||
void Test(const char *name)
|
||||
{
|
||||
Vector<T> v;
|
||||
for(int i = 0; i < 100000; i++)
|
||||
v.Add((T)i);
|
||||
Sha1Stream sha1;
|
||||
v.Serialize(sha1);
|
||||
DLOG(name << " " << sha1.FinishStringS());
|
||||
|
||||
|
||||
for(int i = 0; i < 100000; i++)
|
||||
v.Add((T)Random());
|
||||
|
||||
StringStream mm;
|
||||
v.Serialize(mm);
|
||||
|
||||
|
||||
StringStream ss(mm.GetResult());
|
||||
Vector<T> vv;
|
||||
vv.Serialize(ss);
|
||||
|
||||
for(int i = 0; i < v.GetCount(); i++)
|
||||
ASSERT(v[i] == vv[i]);
|
||||
}
|
||||
|
||||
CONSOLE_APP_MAIN
|
||||
{
|
||||
StdLogSetup(LOG_COUT|LOG_FILE);
|
||||
|
||||
Test<byte>("byte");
|
||||
Test<word>("word");
|
||||
Test<int>("int");
|
||||
Test<int64>("int64");
|
||||
Test<float>("float");
|
||||
Test<double>("double");
|
||||
|
||||
CheckLogEtalon();
|
||||
}
|
||||
10
autotest/SerializeVectorRaw/SerializeVectorRaw.upp
Normal file
10
autotest/SerializeVectorRaw/SerializeVectorRaw.upp
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
uses
|
||||
Core;
|
||||
|
||||
file
|
||||
Etalon.log,
|
||||
SerializeVectorRaw.cpp;
|
||||
|
||||
mainconfig
|
||||
"" = "";
|
||||
|
||||
|
|
@ -1,52 +1,52 @@
|
|||
LAYOUT(HomeBudgetLayout, 748, 400)
|
||||
ITEM(GridCtrl, month, LeftPosZ(4, 124).VSizePosZ(4, 34))
|
||||
ITEM(TabCtrl, tab, HSizePosZ(132, 2).VSizePosZ(4, 186))
|
||||
ITEM(Button, about, SetLabel(t_("About")).LeftPosZ(4, 76).BottomPosZ(4, 26))
|
||||
ITEM(Button, help, SetLabel(t_("Help")).LeftPosZ(84, 76).BottomPosZ(4, 26))
|
||||
ITEM(Button, options, SetLabel(t_("Options")).LeftPosZ(164, 76).BottomPosZ(4, 26))
|
||||
ITEM(Button, exit, SetLabel(t_("Exit")).RightPosZ(6, 76).BottomPosZ(4, 26))
|
||||
ITEM(LabelBox, dv___6, SetLabel(t_("Summary")).HSizePosZ(132, 224).BottomPosZ(34, 148))
|
||||
ITEM(StaticText, dv___7, SetText(t_("Income:")).SetFont(StdFontZ(18).Bold()).LeftPosZ(140, 88).BottomPosZ(144, 22))
|
||||
ITEM(StaticText, plus, SetFont(StdFontZ(18).Bold()).HSizePosZ(232, 376).BottomPosZ(144, 22))
|
||||
ITEM(StaticText, dv___9, SetText(t_("Spent:")).SetFont(StdFontZ(18).Bold()).LeftPosZ(140, 88).BottomPosZ(118, 24))
|
||||
ITEM(StaticText, minus, SetFont(StdFontZ(18).Bold()).HSizePosZ(232, 376).BottomPosZ(120, 22))
|
||||
ITEM(StaticText, rest_label, SetText(t_("Rest:")).SetFont(StdFontZ(18).Bold()).LeftPosZ(140, 88).BottomPosZ(96, 22))
|
||||
ITEM(StaticText, rest, SetFont(StdFontZ(18).Bold()).HSizePosZ(232, 376).BottomPosZ(96, 22))
|
||||
ITEM(StaticText, dv___13, SetText(t_("Amount from prev. month:")).SetFont(StdFontZ(18).Bold()).LeftPosZ(140, 268).BottomPosZ(72, 22))
|
||||
ITEM(StaticText, prev_month, SetFont(StdFontZ(18).Bold()).HSizePosZ(412, 232).BottomPosZ(72, 22))
|
||||
ITEM(StaticText, dv___15, SetText(t_("Final rest:")).SetFont(StdFontZ(18).Bold()).LeftPosZ(140, 268).BottomPosZ(48, 22))
|
||||
ITEM(StaticText, real_rest, SetFont(StdFontZ(18).Bold()).HSizePosZ(412, 232).BottomPosZ(48, 22))
|
||||
ITEM(LabelBox, dv___17, SetLabel(t_("Most expensive")).RightPosZ(4, 216).BottomPosZ(34, 148))
|
||||
ITEM(TabCtrl, tabmost, RightPosZ(12, 200).BottomPosZ(42, 124))
|
||||
ITEM(Upp::GridCtrl, month, LeftPosZ(4, 124).VSizePosZ(4, 34))
|
||||
ITEM(Upp::TabCtrl, tab, HSizePosZ(132, 2).VSizePosZ(4, 186))
|
||||
ITEM(Upp::Button, about, SetLabel(t_("About")).LeftPosZ(4, 76).BottomPosZ(4, 26))
|
||||
ITEM(Upp::Button, help, SetLabel(t_("Help")).LeftPosZ(84, 76).BottomPosZ(4, 26))
|
||||
ITEM(Upp::Button, options, SetLabel(t_("Options")).LeftPosZ(164, 76).BottomPosZ(4, 26))
|
||||
ITEM(Upp::Button, exit, SetLabel(t_("Exit")).RightPosZ(6, 76).BottomPosZ(4, 26))
|
||||
ITEM(Upp::LabelBox, dv___6, SetLabel(t_("Summary")).HSizePosZ(132, 224).BottomPosZ(34, 148))
|
||||
ITEM(Upp::StaticText, dv___7, SetText(t_("Income:")).SetFont(Upp::StdFontZ(18).Bold()).LeftPosZ(140, 88).BottomPosZ(144, 22))
|
||||
ITEM(Upp::StaticText, plus, SetFont(Upp::StdFontZ(18).Bold()).HSizePosZ(232, 376).BottomPosZ(144, 22))
|
||||
ITEM(Upp::StaticText, dv___9, SetText(t_("Spent:")).SetFont(Upp::StdFontZ(18).Bold()).LeftPosZ(140, 88).BottomPosZ(118, 24))
|
||||
ITEM(Upp::StaticText, minus, SetFont(Upp::StdFontZ(18).Bold()).HSizePosZ(232, 376).BottomPosZ(120, 22))
|
||||
ITEM(Upp::StaticText, rest_label, SetText(t_("Rest:")).SetFont(Upp::StdFontZ(18).Bold()).LeftPosZ(140, 88).BottomPosZ(96, 22))
|
||||
ITEM(Upp::StaticText, rest, SetFont(Upp::StdFontZ(18).Bold()).HSizePosZ(232, 376).BottomPosZ(96, 22))
|
||||
ITEM(Upp::StaticText, dv___13, SetText(t_("Amount from prev. month:")).SetFont(Upp::StdFontZ(18).Bold()).LeftPosZ(140, 268).BottomPosZ(72, 22))
|
||||
ITEM(Upp::StaticText, prev_month, SetFont(Upp::StdFontZ(18).Bold()).HSizePosZ(412, 232).BottomPosZ(72, 22))
|
||||
ITEM(Upp::StaticText, dv___15, SetText(t_("Final rest:")).SetFont(Upp::StdFontZ(18).Bold()).LeftPosZ(140, 268).BottomPosZ(48, 22))
|
||||
ITEM(Upp::StaticText, real_rest, SetFont(Upp::StdFontZ(18).Bold()).HSizePosZ(412, 232).BottomPosZ(48, 22))
|
||||
ITEM(Upp::LabelBox, dv___17, SetLabel(t_("Most expensive")).RightPosZ(4, 216).BottomPosZ(34, 148))
|
||||
ITEM(Upp::TabCtrl, tabmost, RightPosZ(12, 200).BottomPosZ(42, 124))
|
||||
END_LAYOUT
|
||||
|
||||
LAYOUT(OptionsLayout, 216, 86)
|
||||
ITEM(StaticText, dv___0, SetText(t_("Language")).LeftPosZ(4, 60).TopPosZ(4, 18))
|
||||
ITEM(DropList, lang, LeftPosZ(68, 144).TopPosZ(4, 19))
|
||||
ITEM(Button, ok, SetLabel(t_("OK")).RightPosZ(4, 74).BottomPosZ(4, 24))
|
||||
ITEM(Button, clear, SetLabel(t_("Clear all data from database")).RightPosZ(4, 208).BottomPosZ(34, 24))
|
||||
ITEM(Upp::StaticText, dv___0, SetText(t_("Language")).LeftPosZ(4, 60).TopPosZ(4, 18))
|
||||
ITEM(Upp::DropList, lang, LeftPosZ(68, 144).TopPosZ(4, 19))
|
||||
ITEM(Upp::Button, ok, SetLabel(t_("OK")).RightPosZ(4, 74).BottomPosZ(4, 24))
|
||||
ITEM(Upp::Button, clear, SetLabel(t_("Clear all data from database")).RightPosZ(4, 208).BottomPosZ(34, 24))
|
||||
END_LAYOUT
|
||||
|
||||
LAYOUT(AboutLayout, 456, 288)
|
||||
ITEM(RichTextView, info, SetFrame(BlackFrame()).HSizePosZ(4, 4).TopPosZ(4, 252))
|
||||
ITEM(Button, cancel, SetLabel(t_("OK")).HCenterPosZ(72, 0).TopPosZ(260, 24))
|
||||
ITEM(Upp::RichTextView, info, SetFrame(Upp::BlackFrame()).HSizePosZ(4, 4).TopPosZ(4, 252))
|
||||
ITEM(Upp::Button, cancel, SetLabel(t_("OK")).HCenterPosZ(72, 0).TopPosZ(260, 24))
|
||||
END_LAYOUT
|
||||
|
||||
LAYOUT(NewCategoryLayout, 244, 108)
|
||||
ITEM(StaticText, dv___0, SetText(t_("Category")).LeftPosZ(4, 60).TopPosZ(4, 19))
|
||||
ITEM(DropList, groups, LeftPosZ(68, 146).TopPosZ(4, 20))
|
||||
ITEM(Button, addgroup, LeftPosZ(218, 20).TopPosZ(4, 20))
|
||||
ITEM(StaticText, dv___3, SetText(t_("Name")).LeftPosZ(4, 60).TopPosZ(26, 19))
|
||||
ITEM(EditString, name, LeftPosZ(68, 172).TopPosZ(26, 19))
|
||||
ITEM(Switch, pm, SetLabel(t_("Plus\nMinus")).LeftPosZ(68, 100).TopPosZ(50, 15))
|
||||
ITEM(Button, ok, SetLabel(t_("OK")).LeftPosZ(88, 74).TopPosZ(80, 24))
|
||||
ITEM(Button, cancel, SetLabel(t_("Cancel")).LeftPosZ(166, 74).TopPosZ(80, 24))
|
||||
ITEM(Upp::StaticText, dv___0, SetText(t_("Category")).LeftPosZ(4, 60).TopPosZ(4, 19))
|
||||
ITEM(Upp::DropList, groups, LeftPosZ(68, 146).TopPosZ(4, 20))
|
||||
ITEM(Upp::Button, addgroup, LeftPosZ(218, 20).TopPosZ(4, 20))
|
||||
ITEM(Upp::StaticText, dv___3, SetText(t_("Name")).LeftPosZ(4, 60).TopPosZ(26, 19))
|
||||
ITEM(Upp::EditString, name, LeftPosZ(68, 172).TopPosZ(26, 19))
|
||||
ITEM(Upp::Switch, pm, SetLabel(t_("Plus\nMinus")).LeftPosZ(68, 100).TopPosZ(50, 15))
|
||||
ITEM(Upp::Button, ok, SetLabel(t_("OK")).LeftPosZ(88, 74).TopPosZ(80, 24))
|
||||
ITEM(Upp::Button, cancel, SetLabel(t_("Cancel")).LeftPosZ(166, 74).TopPosZ(80, 24))
|
||||
END_LAYOUT
|
||||
|
||||
LAYOUT(NewGroupLayout, 204, 56)
|
||||
ITEM(StaticText, dv___0, SetText(t_("Name")).LeftPosZ(4, 60).TopPosZ(4, 19))
|
||||
ITEM(EditString, name, LeftPosZ(68, 130).TopPosZ(4, 19))
|
||||
ITEM(Button, ok, SetLabel(t_("OK")).LeftPosZ(48, 74).TopPosZ(28, 24))
|
||||
ITEM(Button, cancel, SetLabel(t_("Cancel")).LeftPosZ(126, 74).TopPosZ(28, 24))
|
||||
ITEM(Upp::StaticText, dv___0, SetText(t_("Name")).LeftPosZ(4, 60).TopPosZ(4, 19))
|
||||
ITEM(Upp::EditString, name, LeftPosZ(68, 130).TopPosZ(4, 19))
|
||||
ITEM(Upp::Button, ok, SetLabel(t_("OK")).LeftPosZ(48, 74).TopPosZ(28, 24))
|
||||
ITEM(Upp::Button, cancel, SetLabel(t_("Cancel")).LeftPosZ(126, 74).TopPosZ(28, 24))
|
||||
END_LAYOUT
|
||||
|
||||
|
|
|
|||
|
|
@ -1,13 +0,0 @@
|
|||
#include <Core/Core.h>
|
||||
|
||||
using namespace Upp;
|
||||
|
||||
Vector<ValueMap> g_turbine_data; // one for turbine*scenario
|
||||
|
||||
CONSOLE_APP_MAIN
|
||||
{
|
||||
String data = LoadFile("D:/xxx/td.bin");
|
||||
RDUMP(data.GetCount());
|
||||
LoadFromString(g_turbine_data, data);
|
||||
RDUMP(g_turbine_data);
|
||||
}
|
||||
|
|
@ -1,9 +0,0 @@
|
|||
uses
|
||||
Core;
|
||||
|
||||
file
|
||||
WeirdBug.cpp;
|
||||
|
||||
mainconfig
|
||||
"" = "DEBUGCODE";
|
||||
|
||||
|
|
@ -1,25 +1,25 @@
|
|||
LAYOUT(GridPanel, 896, 540)
|
||||
ITEM(TabCtrl, tab, HSizePosZ(4, 412).VSizePosZ(4, 28))
|
||||
ITEM(Button, resort, SetLabel(t_("Resort")).LeftPosZ(4, 104).BottomPosZ(4, 20))
|
||||
ITEM(Button, toxml, SetLabel(t_("To XML")).LeftPosZ(112, 56).BottomPosZ(4, 20))
|
||||
ITEM(Button, fromxml, SetLabel(t_("From XML")).LeftPosZ(172, 56).BottomPosZ(4, 20))
|
||||
ITEM(Upp::TabCtrl, tab, HSizePosZ(4, 412).VSizePosZ(4, 28))
|
||||
ITEM(Upp::Button, resort, SetLabel(t_("Resort")).LeftPosZ(4, 104).BottomPosZ(4, 20))
|
||||
ITEM(Upp::Button, toxml, SetLabel(t_("To XML")).LeftPosZ(112, 56).BottomPosZ(4, 20))
|
||||
ITEM(Upp::Button, fromxml, SetLabel(t_("From XML")).LeftPosZ(172, 56).BottomPosZ(4, 20))
|
||||
ITEM(Panel, panel, RightPosZ(4, 404).VSizePosZ(4, 0))
|
||||
END_LAYOUT
|
||||
|
||||
LAYOUT(Test, 564, 356)
|
||||
ITEM(GridCtrl, dv___0, MovingCols(true).MovingRows(true).LiveCursor(true).Indicator(true).LeftPosZ(112, 312).TopPosZ(48, 202))
|
||||
ITEM(Upp::GridCtrl, dv___0, Indicator(true).MovingCols(true).MovingRows(true).LiveCursor(true).LeftPosZ(112, 312).TopPosZ(48, 202))
|
||||
END_LAYOUT
|
||||
|
||||
LAYOUT(DynamicLayout, 380, 216)
|
||||
ITEM(Button, create, SetLabel(t_("Create Grid")).LeftPosZ(4, 72).TopPosZ(4, 24))
|
||||
ITEM(Button, remove, SetLabel(t_("Remove Grid")).LeftPosZ(80, 72).TopPosZ(4, 24))
|
||||
ITEM(Upp::Button, create, SetLabel(t_("Create Grid")).LeftPosZ(4, 72).TopPosZ(4, 24))
|
||||
ITEM(Upp::Button, remove, SetLabel(t_("Remove Grid")).LeftPosZ(80, 72).TopPosZ(4, 24))
|
||||
ITEM(Splitter, spl, HSizePosZ(4, 4).VSizePosZ(32, 4))
|
||||
END_LAYOUT
|
||||
|
||||
LAYOUT(DisplayLayout, 400, 200)
|
||||
ITEM(LabelBox, dv___0, HSizePosZ(4, 8).VSizePosZ(12, 16))
|
||||
ITEM(Button, dv___1, SetLabel(t_("Button")).RightPosZ(32, 76).TopPosZ(72, 32))
|
||||
ITEM(DocEdit, dv___2, LeftPosZ(20, 168).TopPosZ(48, 104))
|
||||
ITEM(Upp::LabelBox, dv___0, HSizePosZ(4, 8).VSizePosZ(12, 16))
|
||||
ITEM(Upp::Button, dv___1, SetLabel(t_("Button")).RightPosZ(32, 76).TopPosZ(72, 32))
|
||||
ITEM(Upp::DocEdit, dv___2, LeftPosZ(20, 168).TopPosZ(48, 104))
|
||||
END_LAYOUT
|
||||
|
||||
LAYOUT(GridTestMain, 628, 520)
|
||||
|
|
|
|||
|
|
@ -63,7 +63,7 @@ END_LAYOUT
|
|||
LAYOUT(PanelLayout, 408, 572)
|
||||
ITEM(Upp::Button, clear_grid, SetLabel(t_("Clear grid")).RightPosZ(308, 96).BottomPosZ(4, 20))
|
||||
ITEM(Upp::Button, reset_grid, SetLabel(t_("Reset grid")).RightPosZ(208, 92).BottomPosZ(4, 20))
|
||||
ITEM(Upp::LineEdit, log0, SetFont(MonospaceZ(12)).RightPosZ(4, 200).VSizePosZ(4, 28))
|
||||
ITEM(Upp::LineEdit, log0, SetFont(Upp::MonospaceZ(12)).RightPosZ(4, 200).VSizePosZ(4, 28))
|
||||
ITEM(Upp::Button, clear, SetLabel(t_("Clear")).RightPosZ(4, 64).BottomPosZ(4, 20))
|
||||
ITEM(Upp::Button, debug, SetLabel(t_("Debug")).RightPosZ(140, 64).BottomPosZ(4, 20))
|
||||
ITEM(Upp::TabCtrl, opts, RightPosZ(208, 196).VSizePosZ(4, 28))
|
||||
|
|
|
|||
|
|
@ -92,6 +92,7 @@ CONSOLE_APP_MAIN
|
|||
CopyFolder(bin, upptmp, false);
|
||||
CopyFolder(bin + "/win32", upptmp + "/bin");
|
||||
SaveFile(upptmp + "/dbghelp.dll", LoadFile(bin + "/win32_dlls/dbghelp.dll"));
|
||||
SaveFile(upptmp + "/libclang.dll", LoadFile(bin + "/win32_dlls/libclang.dll"));
|
||||
SaveFile(upptmp + "/README",
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
R"--(U++ Windows Installation
|
||||
|
|
|
|||
|
|
@ -33,18 +33,18 @@ learning programing TheIDE is what you are looking for. It runs
|
|||
on most modern operating system and allows to develop applications
|
||||
according to the latest standards. Moreover, TheIDE code base
|
||||
allows to launch it on different kind of architecture like ARM.
|
||||
In Ultimate`+`+ foundation, we strongly believe that cheap ARM
|
||||
computers like [^https`:`/`/www`.raspberrypi`.org`/^ Raspberry
|
||||
Pi] is a key to learn programing among young people.&]
|
||||
[s5; TheIDE is not only intended to be only IDE for Ultimate`+`+
|
||||
purpose. It works well with standardized C`+`+. Currently with
|
||||
embedded compiler on Microsoft Windows TheIDE fully supports
|
||||
C`+`+11 and C11. On GNU/Linux the capability is similar due to
|
||||
usage of operating system bundled compiler. Please notice that
|
||||
projects created on one system can be easily moved to another
|
||||
without any modification. If you don`'t know what is compiler
|
||||
I hasten to explain. It is a program that translates your code
|
||||
into a format that is understandable by your computer.&]
|
||||
In U`+`+ foundation, we strongly believe that cheap ARM computers
|
||||
like [^https`:`/`/www`.raspberrypi`.org`/^ Raspberry Pi] is a key
|
||||
to learn programing among young people.&]
|
||||
[s5; TheIDE is not only intended to be only IDE for U`+`+ purpose.
|
||||
It works well with standardized C`+`+. Currently with embedded
|
||||
compiler on Microsoft Windows TheIDE fully supports C`+`+20 and
|
||||
C17. On GNU/Linux the capability is similar due to usage of operating
|
||||
system bundled compiler. Please notice that projects created
|
||||
on one system can be easily moved to another without any modification.
|
||||
If you don`'t know what is compiler I hasten to explain. It is
|
||||
a program that translates your code into a format that is understandable
|
||||
by your computer.&]
|
||||
[s5; One of the biggest advantage of TheIDE is that it is an open
|
||||
source project. For the long term perspective, it contributed
|
||||
to the maturity and stability. It was also created by people
|
||||
|
|
@ -86,9 +86,9 @@ believe that communication is the key. Ask and we certainly find
|
|||
a solution for your problem.&]
|
||||
[s5; The easiest way to start a journey with open source is to find
|
||||
a bug and deliver an appropriate patch. It should come naturally
|
||||
when you work daily with Ultimate`+`+ and TheIDE. Later you can
|
||||
implement your own features. If you are looking for inspiration,
|
||||
please visit our [^http`:`/`/www`.ultimatepp`.org`/gsoc`$uppweb`$gsoc2014`$en`-us`.html^ G
|
||||
when you work daily with U`+`+ and TheIDE. Later you can implement
|
||||
your own features. If you are looking for inspiration, please
|
||||
visit our [^http`:`/`/www`.ultimatepp`.org`/gsoc`$uppweb`$gsoc2014`$en`-us`.html^ G
|
||||
oogle Summer of Code] site.&]
|
||||
[s5; It is also possible to write your thesis based on and within
|
||||
U`+`+ framework.&]
|
||||
|
|
|
|||
|
|
@ -256,52 +256,52 @@ COMPRESSED
|
|||
204,47,15,54,228,4,220,138,76,22,195,69,75,120,118,225,155,66,234,241,184,131,179,233,39,85,125,95,22,69,244,130,237,151,30,69,49,179,143,205,46,78,228,65,234,184,27,13,226,228,77,237,0,77,209,66,245,134,18,46,243,192,72,118,176,5,116,90,228,208,92,204,108,44,219,172,128,23,209,74,251,6,205,77,194,237,226,209,62,183,137,247,14,201,147,6,17,77,159,228,48,251,169,144,153,84,50,78,110,239,46,135,209,75,118,92,249,67,67,4,199,175,147,214,244,211,144,110,57,98,18,134,146,39,173,226,35,99,170,219,163,230,58,100,109,204,71,45,59,183,43,66,105,194,226,185,57,7,21,134,43,216,41,191,190,89,204,20,74,123,116,215,188,29,62,58,196,219,148,169,25,191,16,26,0,87,242,86,239,172,40,181,223,43,59,125,61,47,251,135,139,94,124,29,3,164,186,149,79,199,210,113,239,223,83,119,202,52,252,101,23,68,246,180,109,133,152,41,75,163,97,194,161,230,40,122,93,157,205,207,44,23,100,206,239,126,110,159,225,180,230,66,245,50,98,196,
|
||||
188,118,249,224,246,128,96,250,69,248,131,4,112,31,136,121,115,27,154,225,8,177,76,22,153,56,12,107,156,58,117,129,85,166,141,120,242,90,251,7,146,7,220,31,84,231,227,243,1,120,64,234,6,123,98,96,213,177,125,89,60,212,47,134,187,6,116,95,5,25,100,76,212,190,105,241,245,254,216,220,94,95,63,195,29,43,226,146,243,49,112,238,26,150,186,51,12,125,0,9,118,23,47,107,188,217,144,30,68,185,199,6,190,243,93,136,53,209,180,51,107,250,186,8,54,37,63,188,129,153,160,227,220,65,219,191,242,203,117,159,30,214,17,219,52,145,129,219,222,129,241,136,192,11,234,52,25,79,181,12,203,224,201,170,145,66,130,140,154,84,43,239,209,20,180,87,47,141,135,143,71,58,154,222,115,143,85,239,14,92,58,95,169,236,2,36,228,102,107,58,33,119,145,138,78,120,38,166,182,81,249,206,207,15,143,1,162,102,255,218,248,122,243,12,151,122,217,135,42,247,37,43,100,237,220,155,203,10,112,10,158,81,15,156,217,143,167,248,103,138,68,24,176,46,44,119,
|
||||
204,179,107,237,147,70,198,79,40,223,164,59,220,39,145,122,248,138,249,182,176,59,229,158,84,68,165,177,17,159,49,244,126,4,142,56,27,237,43,211,251,109,156,86,161,125,111,132,171,127,94,143,68,200,252,253,152,98,250,24,49,135,168,90,87,233,113,18,250,212,101,245,172,223,174,226,152,121,9,118,171,53,108,90,212,239,69,138,230,104,223,35,91,107,178,194,98,58,102,246,28,136,77,115,12,89,35,97,20,31,180,171,179,7,210,57,65,126,26,203,34,156,168,30,186,127,25,225,62,236,225,59,115,24,172,134,67,135,74,244,231,131,250,221,89,196,45,66,124,176,45,157,219,28,249,76,44,1,0,147,60,187,174,146,57,201,179,50,214,53,107,161,105,236,164,213,10,42,103,7,237,240,88,110,119,99,133,245,249,187,181,227,153,202,102,68,25,186,65,242,161,43,179,221,169,167,219,181,51,40,4,234,246,57,67,208,70,208,72,25,191,254,168,251,190,240,146,248,242,189,192,206,48,116,228,152,32,150,214,243,55,46,187,110,129,203,208,35,99,202,235,167,152,207,202,34,
|
||||
165,149,246,239,89,32,33,44,97,6,150,190,249,5,235,185,91,99,9,2,102,183,23,159,90,207,22,23,147,50,187,80,100,182,166,209,178,225,199,212,37,82,156,133,112,62,109,146,38,182,54,227,95,105,95,214,227,40,183,101,249,87,162,165,82,85,151,184,55,153,49,212,125,104,97,48,102,176,153,39,187,116,175,146,121,158,193,24,63,212,111,239,131,35,34,191,252,186,90,93,37,245,75,100,132,129,115,246,176,246,218,107,59,109,192,54,139,204,3,164,74,166,10,40,26,206,237,153,138,151,143,118,3,130,96,250,231,135,141,159,66,219,157,209,241,230,223,79,205,49,58,175,212,70,163,146,82,228,62,94,93,44,235,170,88,113,113,133,179,128,134,150,227,227,172,144,180,38,171,4,66,222,67,248,56,93,95,78,118,191,56,24,40,250,20,4,174,201,136,202,188,100,216,44,147,183,67,23,123,26,108,47,200,120,244,4,181,78,149,149,150,23,36,79,181,23,24,154,93,173,96,252,72,35,75,183,170,252,253,238,2,96,114,2,163,199,197,160,99,224,47,235,230,150,43,145,
|
||||
110,200,107,66,79,114,181,119,85,20,18,75,73,241,238,23,49,92,66,105,75,34,30,147,8,216,88,131,53,37,119,35,76,163,31,60,16,255,245,225,195,214,112,231,204,237,90,91,211,70,24,175,69,51,239,36,146,137,152,203,227,104,50,133,222,152,179,215,1,239,61,158,97,242,23,116,132,209,241,120,94,32,164,92,85,98,162,56,8,139,207,20,96,204,248,22,220,82,59,13,249,211,99,186,59,238,115,179,94,135,200,127,156,232,215,29,176,68,107,150,45,238,110,110,247,50,154,65,106,150,88,194,70,15,106,68,244,146,225,158,130,43,199,155,223,46,86,151,76,216,67,156,106,80,185,39,81,180,234,69,142,88,66,244,155,134,71,99,126,26,153,146,234,102,126,200,70,164,118,226,20,212,236,192,181,34,67,220,69,2,73,181,185,46,81,165,230,198,62,28,239,241,154,101,157,43,223,130,74,144,233,181,55,246,71,250,41,61,211,48,184,90,241,77,196,15,41,124,53,91,218,180,182,203,144,215,151,236,84,156,137,237,161,207,179,242,130,187,160,19,53,78,230,237,206,149,
|
||||
124,237,197,172,45,231,159,60,220,26,46,54,62,44,119,31,75,160,121,214,98,6,50,77,167,138,109,132,29,52,123,121,221,133,192,243,99,157,234,162,80,207,240,235,109,3,218,229,84,194,144,106,13,56,53,165,162,146,15,7,26,175,114,58,194,97,246,152,82,8,252,100,236,199,237,88,25,24,90,50,247,222,180,161,227,166,0,57,172,218,121,198,155,247,134,232,152,246,82,196,209,172,224,222,11,163,176,171,111,35,117,213,155,148,188,255,79,120,150,65,235,200,61,248,190,232,212,117,42,131,23,210,143,42,110,211,15,99,38,238,139,145,49,8,134,70,55,138,176,237,109,43,69,5,232,112,93,137,18,53,44,111,64,47,132,162,193,130,162,221,63,215,123,53,103,198,108,90,181,103,22,15,223,212,205,121,168,240,144,167,215,35,61,196,188,34,181,249,106,245,183,2,28,68,11,210,153,48,230,137,31,92,231,41,128,86,149,227,77,44,74,185,95,176,54,250,116,204,71,43,224,150,48,122,253,220,68,151,140,82,23,75,170,198,115,138,63,238,227,93,27,19,246,113,196,125,
|
||||
11,125,4,13,145,98,79,202,120,196,78,163,9,79,127,130,210,43,210,107,54,109,4,131,238,224,55,133,72,124,233,18,33,245,168,48,152,187,146,164,215,151,118,196,84,201,65,167,212,23,200,53,250,154,130,131,160,201,87,222,244,203,145,217,159,182,185,178,236,229,26,131,33,130,106,91,50,156,220,71,190,54,117,40,132,235,101,108,47,4,65,201,103,252,217,3,214,242,24,239,101,65,85,237,185,118,97,53,186,156,58,253,148,38,30,29,165,153,178,104,64,15,222,66,226,233,249,109,132,224,81,172,81,197,125,77,220,203,105,118,84,226,16,107,135,20,72,115,226,50,136,212,68,220,104,59,230,49,234,249,28,201,238,204,24,24,225,78,6,6,81,195,121,126,2,209,122,237,134,99,28,146,85,162,183,190,148,68,30,126,124,157,111,1,229,18,254,56,119,117,77,215,152,3,118,41,249,88,130,149,103,122,9,208,139,117,101,25,130,171,125,116,136,176,178,16,58,141,236,72,255,60,230,1,58,106,174,144,227,74,4,209,226,232,166,87,29,64,153,188,95,221,75,126,222,50,
|
||||
86,184,117,207,248,129,64,143,248,116,155,7,26,57,149,226,54,110,68,117,225,163,228,222,31,138,121,188,122,52,215,102,130,87,157,15,225,69,138,38,168,95,105,126,57,109,231,85,127,218,69,109,95,183,131,225,166,189,212,246,156,201,80,87,138,111,73,229,9,197,238,233,197,134,119,183,185,68,181,244,36,20,10,118,28,198,184,224,201,24,28,113,135,177,50,93,34,199,224,53,135,231,73,136,172,39,158,171,119,57,199,3,212,42,113,204,140,15,230,248,220,24,252,204,50,98,14,154,155,114,120,6,81,22,81,118,169,233,165,27,209,18,38,118,216,131,56,166,247,40,228,124,161,170,45,78,103,209,52,96,98,48,191,109,168,102,96,116,85,70,23,211,209,31,47,119,94,182,237,16,18,22,134,23,233,65,12,143,144,68,185,248,245,8,59,85,233,207,196,20,163,136,178,17,3,167,75,214,19,2,178,251,8,25,24,188,178,241,161,130,170,172,143,22,255,122,141,185,171,60,58,215,115,146,47,90,126,142,159,45,13,168,154,186,216,125,65,192,193,140,45,81,220,88,216,216,
|
||||
202,214,74,74,241,17,168,84,48,149,216,238,22,232,40,30,29,152,123,133,115,155,58,5,121,209,217,117,64,140,129,163,205,233,163,83,178,46,189,186,88,137,101,114,164,73,216,28,241,241,33,222,94,79,77,20,174,249,113,88,114,183,157,253,163,40,9,124,170,97,71,91,30,124,59,201,84,83,159,124,222,133,154,139,169,197,197,73,152,169,96,5,154,155,12,155,14,122,142,173,77,79,90,215,168,91,71,215,85,132,119,24,135,77,176,159,116,241,96,187,230,130,244,39,69,154,157,136,220,106,32,199,104,122,196,89,81,83,98,118,221,212,23,139,250,15,6,163,162,59,166,33,236,108,93,138,226,22,99,179,208,161,124,111,146,197,193,34,162,154,58,74,243,73,64,245,244,185,255,103,190,239,246,218,230,161,34,231,180,218,181,21,174,203,194,152,62,4,7,92,16,45,94,137,31,46,188,43,221,189,109,177,175,247,40,74,244,81,214,78,146,172,68,167,68,85,18,113,105,194,58,136,77,111,134,24,221,190,33,49,150,48,105,88,33,243,218,59,76,120,72,48,127,205,193,92,
|
||||
111,245,196,212,175,169,46,72,139,140,146,11,250,68,200,240,97,74,213,38,134,120,179,50,58,88,222,145,24,201,153,70,131,179,73,193,124,22,51,29,178,47,190,106,155,116,30,161,24,12,79,244,163,101,197,11,240,212,61,160,174,80,173,13,73,190,230,87,15,19,3,230,247,231,251,169,8,194,249,16,210,243,204,231,55,110,227,204,54,237,33,225,246,156,77,118,49,95,40,153,239,223,117,8,71,100,255,176,113,211,51,87,76,187,220,102,223,52,7,1,194,175,15,205,43,14,211,144,235,250,169,140,157,187,157,113,126,117,199,184,138,20,31,162,53,216,115,4,157,238,234,65,68,93,162,63,155,27,70,211,37,35,84,151,162,142,186,231,193,142,110,79,180,94,155,59,231,8,242,126,231,195,68,181,116,223,33,123,49,136,20,252,174,104,97,85,16,74,205,203,140,31,140,42,81,4,172,221,95,28,174,135,166,89,95,176,181,143,0,245,50,103,125,172,218,218,58,13,231,109,106,55,213,40,40,171,59,97,140,21,219,207,248,104,157,116,195,58,82,166,30,88,171,219,155,168,
|
||||
151,29,6,73,92,251,70,188,145,249,189,37,131,214,94,157,38,146,13,88,30,99,62,125,66,20,210,21,7,133,116,232,205,105,111,78,241,56,79,23,249,214,13,253,124,104,102,3,115,202,97,54,142,238,33,211,122,125,29,186,231,179,152,170,6,213,124,37,140,123,202,200,9,19,35,226,6,104,4,57,214,129,210,17,236,86,169,103,61,175,208,227,28,189,70,119,168,49,9,190,93,90,181,232,202,154,175,80,136,80,161,202,42,108,10,143,101,45,57,152,51,170,68,104,21,238,95,102,63,6,173,53,7,170,123,85,195,200,247,194,54,22,0,127,230,149,9,44,169,52,150,178,220,250,166,157,244,205,80,171,238,28,229,71,92,83,140,224,136,108,164,242,136,56,91,105,94,151,14,232,24,108,222,60,104,38,186,48,225,24,40,182,204,57,59,65,131,98,80,30,18,70,227,235,232,71,82,86,168,77,40,123,50,63,52,232,241,110,236,95,179,15,177,87,9,164,79,60,151,242,236,200,197,9,33,92,102,195,206,16,13,70,127,133,165,105,23,140,149,43,129,160,49,93,55,90,
|
||||
120,210,38,74,117,37,124,144,197,25,62,115,180,121,219,172,186,191,20,137,115,135,111,66,32,78,193,22,234,71,96,203,90,210,195,235,145,186,21,237,31,154,174,186,43,21,232,17,172,178,96,47,159,51,138,253,14,106,78,203,6,214,177,105,78,21,17,247,0,167,160,183,98,34,152,155,250,23,132,22,249,209,0,116,105,55,141,41,32,41,165,88,21,18,21,100,6,33,45,200,165,97,59,116,231,85,233,185,14,237,156,186,247,245,189,85,21,106,120,90,76,206,244,254,180,200,208,124,26,186,3,66,201,145,104,191,58,192,202,228,1,201,67,159,60,165,74,89,45,226,58,168,166,82,164,226,29,94,18,14,84,59,141,123,136,46,83,208,157,29,143,88,230,109,3,241,140,216,27,137,240,56,168,85,124,65,92,229,240,200,226,145,103,6,238,148,186,79,105,60,225,60,113,194,45,165,42,33,196,208,203,135,219,4,15,206,151,251,243,195,18,205,219,197,171,66,163,12,209,91,153,146,110,149,150,74,199,151,128,197,116,8,187,235,144,225,142,165,109,88,120,191,97,221,171,172,
|
||||
139,185,132,47,158,185,168,6,153,92,181,46,134,6,204,70,224,187,160,87,204,2,49,114,33,82,146,24,9,35,181,46,71,183,201,196,30,54,189,7,116,114,22,208,104,102,219,237,129,34,174,31,26,4,114,4,103,194,197,61,122,81,249,28,200,115,239,158,161,77,8,194,96,5,49,226,3,202,144,60,157,69,134,208,247,121,223,183,72,142,210,172,165,178,132,36,22,143,55,90,41,10,55,194,115,159,123,232,185,169,39,9,148,41,241,32,73,207,128,178,23,13,252,53,70,116,105,221,159,72,41,117,131,20,224,134,186,5,246,98,85,61,229,88,212,161,84,229,122,124,17,168,112,234,124,21,92,175,244,151,28,130,210,209,148,95,62,150,166,142,51,167,150,95,228,83,21,167,90,19,132,225,205,125,134,78,17,158,131,234,232,61,15,96,210,132,116,175,141,81,49,145,148,136,120,89,71,219,166,192,192,55,211,202,196,91,71,55,160,122,66,8,120,84,61,131,169,53,188,226,120,64,147,161,147,95,198,4,62,40,107,208,63,28,241,246,156,166,187,89,81,74,171,99,46,41,
|
||||
49,174,59,214,151,188,74,60,39,156,7,232,54,186,102,132,175,179,44,2,181,97,24,83,72,128,169,10,186,13,139,17,213,249,64,210,87,8,113,59,211,116,217,71,101,65,207,230,85,169,184,119,246,68,78,143,96,145,113,224,83,215,13,194,51,65,201,91,157,151,238,131,167,104,147,109,177,182,179,16,187,73,203,250,200,1,13,40,123,164,40,141,193,146,173,122,20,220,194,185,43,109,6,231,30,118,232,158,99,153,26,56,205,244,65,116,180,35,24,208,1,78,129,150,245,45,6,137,108,209,141,26,71,31,224,169,93,61,49,205,55,237,40,235,155,96,107,151,1,67,173,140,21,217,86,183,1,55,58,248,157,64,202,164,169,103,102,115,100,183,69,197,166,2,34,211,64,93,149,60,92,212,195,172,20,76,71,49,246,77,58,110,39,227,110,30,38,24,42,200,90,68,108,179,19,239,108,85,86,35,203,207,83,35,111,160,81,235,133,105,94,183,151,113,169,69,151,175,251,176,186,138,183,233,209,89,20,102,66,212,168,164,235,80,245,104,75,80,148,150,144,98,71,159,15,147,
|
||||
12,99,155,187,2,205,173,100,138,145,210,44,167,40,55,2,183,199,19,85,239,15,212,24,241,64,56,17,135,103,228,108,103,158,22,207,73,8,95,143,78,151,3,234,85,102,43,110,218,252,146,66,180,119,232,26,241,20,251,139,63,222,230,72,77,159,43,150,216,84,175,58,248,144,78,23,44,199,82,102,8,124,32,25,110,64,190,69,107,9,82,80,88,120,187,138,137,42,112,153,126,232,135,195,129,127,150,147,64,72,33,80,74,178,228,19,115,23,139,9,79,116,251,39,114,139,254,46,162,97,120,151,56,107,226,87,73,207,157,9,25,72,67,173,11,140,97,154,178,192,111,244,80,98,5,159,96,21,156,204,19,152,193,77,120,105,19,51,221,206,65,54,227,179,128,35,83,31,122,253,40,71,23,171,159,101,217,214,139,203,253,69,115,29,43,146,39,148,186,246,233,92,245,154,209,31,95,132,115,164,176,39,201,31,111,91,109,43,203,24,76,74,168,63,173,212,85,253,80,33,148,188,148,253,102,92,145,185,237,131,123,13,57,8,43,135,189,129,111,229,77,6,99,223,144,142,
|
||||
55,62,224,226,165,73,149,249,142,151,89,188,30,22,96,158,27,216,217,211,175,195,33,201,142,142,252,210,91,40,87,156,10,22,192,120,22,100,135,235,225,148,207,198,164,141,119,196,168,110,124,132,105,133,147,165,120,197,96,15,154,66,215,91,161,169,139,147,203,85,145,144,40,16,63,173,59,141,200,224,225,108,232,78,246,75,129,216,65,247,193,176,172,174,205,193,61,69,91,26,36,142,174,111,3,165,122,76,221,150,199,176,149,175,203,171,155,152,131,194,84,80,241,50,86,234,4,175,220,33,229,84,56,235,80,11,27,52,177,121,204,210,69,66,125,0,51,172,99,97,180,26,78,147,170,64,124,118,52,210,106,152,232,105,198,204,151,45,97,44,235,53,156,112,118,47,245,124,205,53,103,140,172,44,161,43,98,0,50,147,117,140,86,159,69,10,76,163,164,235,123,141,81,99,7,179,200,100,167,158,205,136,113,200,35,105,34,208,236,197,241,33,184,200,209,253,36,141,222,92,231,1,210,69,222,177,54,237,131,101,151,207,35,208,175,56,77,141,172,202,185,247,167,115,66,245,
|
||||
4,189,82,89,124,179,115,185,84,165,51,185,242,115,237,147,232,172,79,99,96,17,46,157,38,231,42,192,105,87,0,114,180,142,37,246,100,97,171,59,146,23,52,32,20,35,241,180,158,225,42,253,18,90,49,134,100,3,31,88,78,70,172,245,181,33,252,184,189,88,151,166,62,200,209,216,223,58,142,100,214,185,186,67,14,49,40,185,61,22,237,185,26,245,43,24,138,33,26,140,121,243,130,198,165,56,129,126,119,184,5,241,2,243,20,91,56,72,18,47,46,23,71,133,117,82,104,208,58,123,101,66,40,235,52,135,221,33,93,92,79,127,105,221,140,185,90,0,234,74,214,198,92,143,18,184,10,84,52,31,108,155,91,171,202,188,103,118,212,13,54,193,214,126,252,96,83,188,118,221,16,191,53,7,211,231,163,134,138,180,75,201,45,22,1,242,84,155,50,114,72,68,98,98,214,178,107,23,223,157,143,186,195,8,23,58,153,67,27,140,218,115,18,248,193,97,204,251,231,243,81,220,10,142,195,131,217,157,250,199,213,185,81,50,223,43,50,119,132,83,215,12,107,134,32,65,
|
||||
43,62,207,26,127,113,225,162,99,6,34,0,51,232,253,40,209,175,83,21,149,29,196,185,202,120,2,77,4,155,3,214,195,187,0,214,95,205,228,194,240,41,198,70,141,175,42,99,145,149,115,235,237,55,224,210,135,1,25,15,68,38,98,166,28,242,65,97,19,98,235,59,20,136,17,175,28,41,191,154,167,137,42,137,155,207,93,36,199,124,45,235,157,242,27,139,47,99,101,255,144,58,63,36,195,131,63,71,104,15,225,81,4,9,90,39,234,228,136,151,206,8,120,93,79,186,97,163,134,124,204,52,69,167,30,209,86,229,28,92,217,246,125,24,167,58,58,170,145,228,171,9,17,153,161,197,200,118,230,243,246,129,156,73,45,61,129,38,89,251,16,104,128,88,70,21,117,210,134,135,190,71,238,79,130,208,130,23,119,12,152,196,91,20,154,168,162,74,163,244,134,87,148,121,34,130,148,139,103,168,147,85,207,63,218,146,183,21,97,0,198,135,39,152,70,231,135,89,231,207,57,72,175,138,101,85,64,14,6,12,92,189,90,89,246,37,34,165,111,39,173,63,91,5,63,20,
|
||||
138,203,51,56,82,168,45,85,15,93,219,95,32,27,62,184,106,31,89,76,160,222,131,112,202,110,17,89,157,197,164,47,137,23,66,102,24,242,220,14,229,170,233,137,210,248,96,240,234,27,22,63,122,52,54,146,49,241,202,12,170,175,73,241,16,36,174,79,56,143,27,170,172,46,107,73,229,24,60,208,234,164,176,176,132,186,248,209,207,225,167,74,248,193,197,237,199,130,124,222,144,87,90,188,30,199,202,63,95,169,194,21,229,200,233,3,95,4,211,170,160,75,204,45,234,164,163,93,158,45,117,104,43,19,8,243,145,15,189,225,134,174,145,232,170,99,38,28,100,6,143,115,2,46,237,51,225,190,158,61,93,164,213,73,180,231,16,98,211,235,224,27,179,223,91,147,122,197,103,201,133,39,188,230,117,196,133,185,22,45,221,11,101,232,150,244,186,100,58,222,160,81,15,23,74,113,77,237,103,221,139,29,84,141,7,73,164,94,136,142,196,50,20,14,13,188,245,112,22,184,15,203,161,199,184,45,214,234,4,230,200,166,151,143,16,31,184,105,235,104,98,130,223,32,40,103,
|
||||
210,46,147,155,150,150,33,195,169,138,32,207,116,130,91,160,187,126,8,192,228,109,54,109,114,185,26,221,233,41,223,112,192,81,100,169,35,131,118,13,188,69,7,145,137,165,50,93,130,155,71,164,67,111,136,132,51,133,200,244,172,4,232,96,163,4,140,221,195,59,76,56,36,124,30,34,9,212,147,157,211,233,108,45,178,150,233,43,68,29,7,62,39,59,222,93,82,18,9,228,41,126,121,201,88,210,130,152,192,48,43,156,178,11,184,138,120,224,119,129,208,241,155,226,6,216,229,113,195,133,88,55,229,54,85,75,136,160,133,52,235,220,40,138,235,211,125,159,159,237,162,154,123,206,240,133,58,40,142,228,160,145,250,67,61,223,159,158,18,114,198,214,162,88,6,89,55,69,66,185,45,29,248,201,242,243,238,226,247,169,87,207,77,22,246,65,251,68,159,46,204,55,38,24,226,20,160,171,197,123,65,188,176,156,177,124,85,212,47,96,104,172,86,146,143,250,179,30,157,55,23,244,163,144,222,82,45,171,14,228,243,65,162,153,126,195,132,203,216,65,240,1,27,30,37,159,
|
||||
119,129,223,80,165,49,86,220,141,12,15,8,77,99,160,231,228,219,163,119,48,35,74,135,129,5,123,36,72,57,4,36,222,22,66,72,188,14,35,117,123,133,69,83,32,125,226,92,148,8,154,156,140,77,149,135,191,16,166,228,162,247,107,66,25,29,66,118,37,38,219,138,95,193,230,77,117,133,120,217,192,132,75,162,168,157,222,82,62,185,220,195,34,55,61,89,104,170,101,165,7,29,144,191,82,32,201,131,170,227,145,53,111,33,167,7,228,168,244,119,121,82,172,53,95,192,68,64,190,94,61,127,122,149,122,228,237,119,185,63,169,80,112,162,31,146,35,59,87,249,40,42,105,235,174,65,68,248,158,71,68,78,172,98,177,83,28,251,6,193,19,87,41,31,184,188,191,161,60,94,193,156,120,97,110,108,127,120,42,209,253,89,54,242,203,221,130,242,112,172,179,4,141,200,145,183,210,83,16,3,174,78,121,170,83,183,121,19,177,169,60,111,190,87,75,158,214,22,21,19,40,232,5,75,53,25,241,226,99,133,65,124,120,152,94,167,90,78,142,133,125,202,111,98,145,28,
|
||||
98,210,102,174,40,226,233,247,21,203,66,242,145,213,250,141,126,200,42,234,63,189,219,57,246,105,53,190,81,143,25,42,66,117,212,18,100,166,12,234,41,123,200,11,79,147,69,146,143,134,200,113,102,181,223,45,194,207,251,135,133,213,140,124,141,209,251,37,90,215,100,192,235,211,24,123,169,106,3,158,129,189,105,120,106,172,46,132,230,254,89,50,45,232,16,59,189,28,111,199,164,37,195,104,3,45,194,81,31,106,190,14,134,215,178,92,70,99,201,146,212,1,132,8,220,29,141,7,5,199,204,217,48,54,232,240,218,124,33,62,119,20,235,46,163,190,26,181,123,191,71,0,117,243,213,243,94,134,113,115,135,219,194,107,67,8,230,248,72,170,26,185,79,84,10,87,18,159,173,95,28,79,220,183,53,131,23,180,125,248,184,72,158,187,216,241,245,156,125,118,36,36,159,75,197,161,158,177,72,138,42,101,213,109,84,115,198,149,189,235,13,176,225,70,84,246,152,118,16,114,197,136,193,202,48,74,144,23,186,226,53,91,170,71,135,82,203,71,165,50,72,197,143,132,91,142,
|
||||
150,186,164,17,242,140,14,120,124,22,146,218,62,148,114,173,10,47,180,86,213,1,212,115,5,199,71,246,85,52,155,223,18,190,220,157,219,116,73,203,192,229,15,162,48,186,79,153,94,252,181,23,60,230,37,60,53,179,76,33,53,64,144,199,83,126,160,15,100,20,16,252,41,32,5,62,134,6,213,32,103,89,76,159,148,25,70,188,168,159,19,150,196,138,107,200,107,71,226,54,202,39,29,102,47,235,182,63,87,180,244,246,55,181,19,223,140,4,62,164,78,122,82,10,151,84,75,93,110,166,239,12,22,84,116,203,231,71,150,132,99,75,206,170,234,98,35,208,214,184,53,154,14,219,61,108,49,141,75,6,15,146,230,38,176,220,141,225,131,137,179,227,219,203,160,152,213,231,52,216,58,34,138,192,194,39,180,210,231,11,133,18,25,6,123,81,35,116,23,147,30,54,192,10,226,221,141,194,132,160,123,242,122,127,129,222,39,153,175,76,83,75,221,213,91,100,168,110,176,112,40,226,94,244,29,12,193,53,131,140,194,12,141,218,211,177,85,26,220,89,234,149,184,40,8,225,
|
||||
148,26,118,13,221,37,16,198,141,242,109,187,186,139,162,109,42,35,109,158,141,147,31,72,84,134,123,248,33,217,230,155,168,64,85,34,249,143,3,165,11,17,164,129,177,233,132,105,214,42,228,181,126,86,226,219,232,0,221,237,246,113,106,204,247,248,176,30,81,14,171,239,56,75,210,89,134,134,231,114,185,156,243,176,15,29,57,68,196,1,76,144,198,117,44,129,13,185,73,79,55,118,180,109,145,191,24,49,115,103,174,211,161,178,136,21,119,114,59,164,186,52,166,55,235,74,56,185,177,113,250,41,137,181,83,154,99,248,29,115,102,175,175,243,126,102,215,211,52,231,218,145,206,93,130,244,114,212,18,204,131,88,121,235,209,77,123,28,12,103,9,21,99,120,143,91,231,158,120,157,87,43,172,168,181,231,28,152,133,102,55,95,235,200,172,132,202,231,48,111,182,216,146,81,200,215,96,244,214,35,2,33,176,234,237,28,182,97,221,138,87,93,60,238,31,42,39,211,201,58,157,78,140,165,4,132,9,28,194,73,56,168,221,190,146,153,24,77,124,8,53,85,230,130,195,22,
|
||||
174,31,24,206,185,200,134,117,106,37,113,224,198,102,194,92,111,83,18,39,69,111,248,208,169,55,125,86,136,109,67,51,160,7,111,245,88,179,226,65,240,221,91,119,80,14,242,201,179,12,11,209,242,14,135,50,93,96,125,202,72,143,60,235,168,175,34,207,32,3,235,144,21,173,72,227,64,23,10,79,105,116,171,15,39,152,171,179,92,83,59,235,154,251,0,214,30,50,149,169,42,173,121,96,169,133,94,155,175,187,132,171,30,226,198,14,49,63,46,150,193,62,196,87,239,225,215,248,248,124,145,244,132,160,189,147,228,29,195,149,115,134,152,22,151,139,129,187,112,207,213,64,149,172,226,31,167,171,10,187,168,122,23,137,120,174,55,122,205,201,135,76,165,231,89,103,122,134,180,18,94,192,12,27,246,44,105,208,225,133,135,217,211,120,109,121,41,66,161,76,18,33,220,186,186,18,140,27,131,45,50,186,255,240,187,244,78,218,124,220,231,42,253,60,218,98,40,66,142,91,141,101,68,240,207,248,65,138,166,31,157,78,233,82,204,218,83,172,250,98,234,149,165,12,76,136,
|
||||
29,21,253,12,196,114,91,160,73,131,106,253,81,241,236,172,77,49,211,37,85,95,186,10,38,100,120,128,149,44,15,38,31,24,222,136,158,132,62,224,88,208,44,28,155,24,109,54,82,59,94,93,6,8,39,217,111,161,98,230,111,240,84,180,245,233,73,67,234,245,50,200,214,185,192,202,213,93,213,229,20,7,64,210,72,253,185,114,162,82,210,129,216,91,150,122,115,33,13,229,249,156,91,252,90,187,222,201,121,74,249,87,15,66,227,68,92,82,115,245,9,200,110,48,202,66,49,251,50,92,113,125,57,189,153,94,124,11,244,235,168,40,133,161,215,136,64,226,10,37,146,84,161,202,92,52,73,89,103,63,91,56,198,154,174,61,38,8,42,182,145,64,215,203,160,72,8,82,39,140,235,5,186,194,12,246,163,85,108,199,49,131,154,196,192,200,14,2,176,229,189,249,42,143,12,202,42,47,162,21,34,146,70,220,147,52,87,201,246,208,23,149,117,95,253,254,38,178,174,45,52,252,24,137,11,189,127,124,158,87,120,211,194,206,46,132,84,34,205,155,27,232,83,96,216,236,
|
||||
68,87,153,18,2,113,78,69,133,13,186,100,120,104,207,85,96,161,89,114,148,162,38,136,91,224,47,153,139,51,45,224,163,216,189,138,149,142,80,105,238,32,186,166,78,119,72,56,42,72,139,229,69,193,25,153,151,13,25,227,128,233,217,118,9,107,92,214,237,145,74,246,165,236,253,12,2,170,89,175,142,160,219,164,19,29,160,147,56,82,241,50,111,183,208,68,140,13,166,12,180,132,227,37,130,192,41,222,90,203,198,99,124,208,129,189,24,88,29,159,110,12,49,16,73,18,28,67,196,147,185,215,83,157,184,173,240,10,225,74,166,104,181,152,46,236,196,68,75,229,82,111,60,159,254,34,244,162,154,94,220,136,8,78,140,111,61,41,107,213,19,255,204,77,50,252,136,230,144,107,49,78,208,66,69,118,220,156,78,236,129,77,159,195,217,31,243,99,31,16,131,115,160,184,225,74,164,143,169,213,244,177,21,55,169,35,51,215,43,212,218,86,115,98,246,44,102,206,183,99,116,171,158,18,211,61,241,106,185,65,123,46,90,167,41,168,97,142,70,233,64,74,50,85,170,42,
|
||||
52,38,27,126,15,87,208,181,242,6,8,14,136,162,136,114,193,17,248,184,38,147,94,117,174,139,50,4,71,251,179,50,94,128,135,183,87,131,57,173,4,70,250,18,129,244,114,227,155,132,182,244,195,115,184,135,152,241,2,237,246,193,211,138,211,162,110,167,191,58,160,145,149,211,34,25,174,196,33,4,99,222,217,87,251,100,49,253,53,170,91,236,210,193,172,12,100,108,68,186,131,171,253,227,238,20,235,43,155,224,211,244,216,31,62,219,33,52,246,154,121,79,45,43,51,5,3,252,166,41,238,118,20,136,226,82,240,13,236,114,40,95,129,40,185,215,89,73,144,6,159,205,224,58,9,131,86,196,166,113,145,67,201,70,70,39,203,109,114,188,202,125,31,150,22,150,57,125,228,228,18,153,215,220,198,1,41,48,167,152,119,34,59,136,231,29,164,111,32,223,51,250,39,117,37,136,252,137,44,27,119,138,168,197,143,117,229,81,147,38,113,151,40,55,76,79,131,203,18,115,164,134,249,237,118,25,47,244,200,136,250,60,142,118,230,85,155,103,185,18,235,112,38,181,42,72,
|
||||
138,231,174,73,43,210,166,198,180,205,72,57,169,216,114,29,100,51,21,22,200,236,9,125,20,198,22,49,251,138,189,212,198,221,177,161,161,83,142,207,185,189,179,198,185,2,226,206,156,171,11,114,158,209,54,200,162,73,232,117,165,80,234,107,44,174,6,155,165,89,211,151,97,43,60,189,245,116,224,154,134,211,104,23,47,16,8,173,77,72,6,61,34,180,52,159,61,43,229,43,184,56,68,183,12,72,27,155,234,165,99,208,208,209,189,167,125,62,29,160,88,236,206,199,162,22,58,155,117,8,124,217,168,27,26,3,152,171,142,167,224,126,114,38,174,202,173,53,29,189,147,32,110,53,221,164,63,92,161,236,226,43,215,67,78,38,140,29,156,19,39,98,208,219,216,244,87,3,34,158,126,54,183,226,194,153,14,25,58,70,92,22,117,104,31,50,218,118,45,188,42,83,243,122,16,249,51,241,16,85,148,152,168,45,61,82,243,234,26,99,84,194,251,151,1,56,152,102,117,11,252,43,26,10,236,45,21,71,249,181,223,198,7,82,107,88,208,87,208,240,33,195,117,79,222,27,
|
||||
141,127,170,151,51,152,237,115,87,44,244,51,214,230,93,94,5,177,85,49,61,226,118,205,179,58,191,168,235,116,146,13,74,185,207,165,226,166,196,226,55,240,185,103,11,139,170,217,208,162,38,73,4,234,61,75,173,234,18,213,179,95,90,53,95,112,106,161,120,228,171,77,64,99,25,189,25,227,52,142,58,215,247,110,214,116,94,56,203,189,105,179,229,169,130,226,51,219,190,192,139,202,213,10,58,99,60,114,66,44,62,199,58,134,84,69,114,87,151,78,175,231,69,76,150,118,156,125,222,216,58,44,83,52,69,242,2,205,53,149,53,88,216,161,194,10,215,49,30,207,222,152,28,163,115,208,161,203,242,231,147,179,114,190,168,122,221,149,228,53,45,180,188,175,27,202,66,70,173,74,26,107,86,177,103,84,30,109,124,45,101,131,48,204,44,27,44,214,110,113,132,174,66,135,45,95,125,230,90,108,140,58,248,233,48,17,148,65,52,251,231,66,224,116,60,220,201,248,169,95,15,74,177,168,143,86,58,31,169,177,163,120,22,227,114,228,172,116,26,205,100,182,51,15,22,2,
|
||||
119,143,130,63,182,151,224,126,232,159,77,32,222,252,254,206,69,71,59,19,147,142,124,136,146,52,6,119,225,40,209,202,162,110,201,208,121,89,81,147,139,223,78,91,148,168,202,6,212,48,206,131,41,229,70,69,32,71,210,108,97,228,225,46,182,121,109,122,122,83,185,209,82,135,193,250,236,45,94,124,168,143,234,217,43,222,86,91,50,111,53,168,172,217,168,213,177,25,172,204,73,198,3,213,42,209,233,57,219,60,175,31,239,65,51,205,155,35,222,250,212,16,143,140,112,7,82,224,52,37,6,19,26,229,177,76,155,249,118,90,96,190,180,202,248,144,160,166,50,209,114,188,154,53,98,213,83,249,0,199,111,104,179,49,241,40,22,26,147,200,165,218,222,102,154,195,102,0,179,121,210,204,229,30,32,188,18,13,50,190,5,204,237,240,90,91,34,193,95,160,28,195,251,205,75,15,214,137,90,52,48,30,88,137,15,95,60,127,145,90,186,57,174,56,122,79,200,166,83,149,200,102,44,236,72,69,144,143,119,211,34,136,251,243,90,90,52,171,173,132,138,204,22,98,138,130,
|
||||
168,102,62,41,178,176,150,165,51,101,199,77,234,156,96,23,231,10,148,202,150,178,212,147,199,24,27,213,212,147,167,154,19,162,14,163,153,153,154,167,104,21,135,241,56,130,129,254,133,15,64,107,214,133,167,172,214,232,95,114,195,203,16,4,219,166,233,206,138,126,237,93,247,91,143,27,228,210,170,190,55,202,109,16,55,253,254,0,203,144,68,96,162,34,5,169,58,223,209,126,74,135,153,181,238,144,86,19,201,146,157,155,224,30,56,165,108,41,145,110,163,146,174,44,87,138,211,186,231,162,215,134,127,25,57,118,165,133,14,78,13,211,109,180,141,70,196,249,117,209,146,209,203,94,207,42,225,242,76,14,2,10,186,219,46,134,29,215,2,49,157,76,188,11,78,250,84,150,233,56,150,90,255,188,80,70,190,105,171,51,176,242,17,211,76,23,9,194,196,97,130,219,208,56,3,105,149,146,124,86,168,139,217,102,52,154,69,209,4,87,45,168,57,209,180,134,43,255,162,236,135,239,53,126,205,163,101,150,158,107,238,70,37,195,76,159,171,123,224,149,106,160,240,27,122,59,
|
||||
194,104,23,120,43,185,112,138,202,243,55,138,239,205,44,96,181,160,86,188,226,97,10,34,230,14,103,69,160,36,234,8,251,34,142,116,22,102,18,72,148,79,135,251,57,216,31,180,109,61,130,154,47,117,206,165,21,175,203,55,226,233,28,24,61,144,225,220,75,22,65,209,82,135,121,88,60,154,28,71,211,15,14,82,72,56,147,116,126,70,11,125,75,13,69,189,51,132,46,93,176,241,18,85,7,184,55,93,226,66,172,180,51,158,224,57,177,176,174,65,107,178,215,19,77,187,145,230,36,84,137,224,50,131,158,163,221,146,166,40,174,16,152,90,152,138,115,202,150,229,174,148,101,79,160,33,30,245,135,142,23,51,165,64,145,25,79,236,229,182,63,209,113,194,50,10,17,217,186,150,177,57,187,38,220,138,97,181,226,168,115,174,56,251,253,63,103,107,181,170,114,235,6,225,236,52,215,90,214,141,91,247,116,34,136,197,24,84,120,78,157,42,176,71,63,195,20,71,178,77,254,134,83,200,16,136,181,127,237,227,35,111,21,37,219,10,177,165,14,170,85,170,64,217,185,229,
|
||||
115,4,253,15,233,46,9,122,116,112,160,236,192,104,67,195,231,66,232,232,193,187,24,129,228,225,102,207,33,133,87,70,7,199,233,217,222,153,207,176,85,20,25,36,120,188,123,177,110,221,203,215,14,180,109,101,221,120,88,168,198,229,144,246,176,100,151,112,227,173,215,50,112,78,120,235,242,161,238,135,232,198,220,74,65,24,202,118,56,54,173,140,142,26,3,40,100,192,76,254,218,144,246,254,16,58,129,37,249,166,213,43,43,89,148,139,43,134,50,166,41,26,56,92,73,86,170,61,22,211,84,21,235,181,29,50,68,172,89,170,40,87,244,74,73,182,232,77,132,101,54,128,205,202,45,13,12,243,64,135,206,96,245,138,93,241,130,200,121,241,114,75,173,126,93,243,214,54,110,3,13,70,227,52,41,31,92,107,130,102,95,88,172,194,113,45,238,36,103,174,127,158,48,112,32,113,35,230,20,75,152,105,79,156,206,139,200,216,173,138,206,113,231,168,111,252,160,21,14,117,39,18,69,117,168,179,216,61,92,238,54,121,64,165,53,133,169,206,144,58,90,146,238,91,39,70,
|
||||
139,24,89,20,91,248,161,52,62,117,188,96,133,253,222,59,220,108,48,173,104,51,244,61,186,197,165,42,135,209,153,195,192,236,163,182,68,110,12,244,92,162,66,42,72,26,234,241,172,224,52,104,153,16,113,126,177,203,43,226,107,79,65,232,83,107,186,40,7,93,73,243,58,225,17,197,81,88,73,95,134,36,210,180,215,171,191,152,205,226,171,209,132,5,206,51,65,159,190,244,140,227,90,123,92,233,87,171,8,75,111,145,181,229,11,178,189,1,8,196,181,66,219,205,44,52,26,152,51,157,82,61,95,175,178,73,196,65,128,228,93,119,188,92,236,132,42,145,4,191,132,44,203,246,54,208,57,199,131,106,229,115,223,7,134,149,235,200,72,58,154,54,66,47,155,81,58,95,206,66,171,32,74,48,63,155,131,39,240,107,15,185,97,71,106,91,228,190,14,170,201,96,121,195,213,114,107,173,227,214,27,128,172,78,206,67,88,36,77,57,75,86,142,168,108,125,58,202,30,246,50,169,243,150,212,162,92,92,108,3,121,162,229,58,12,211,73,152,143,130,114,138,182,36,87,35,
|
||||
11,233,98,5,216,224,23,202,96,141,82,32,10,165,32,118,169,68,1,102,151,197,220,200,42,200,117,180,65,178,208,153,145,59,70,169,78,161,131,203,47,162,40,157,218,16,75,107,19,34,57,169,202,177,201,29,208,233,39,231,214,24,38,42,184,110,86,31,213,163,220,137,61,103,163,227,225,113,106,83,149,171,66,255,169,47,93,239,242,206,168,10,131,220,229,28,226,237,95,241,197,187,231,189,235,77,208,85,29,22,57,149,175,177,151,58,89,189,114,157,187,162,219,162,232,143,177,85,221,117,24,23,133,48,192,112,29,162,175,230,101,34,14,234,7,148,194,186,89,34,225,35,73,250,221,75,174,172,226,124,54,23,95,172,143,51,152,135,183,137,167,131,193,42,78,1,111,84,109,141,91,93,6,221,52,101,132,29,95,108,179,87,127,29,204,52,145,231,44,76,236,246,114,10,108,202,59,208,154,91,93,180,96,180,96,102,73,243,99,168,221,5,48,75,246,33,53,197,130,84,74,133,122,130,31,218,64,78,41,30,176,55,18,91,221,194,192,35,100,102,237,241,30,134,85,213,
|
||||
47,194,82,108,89,202,12,27,80,131,253,57,40,221,149,184,83,90,83,209,149,128,41,29,188,114,107,234,28,225,220,173,220,26,232,193,144,70,125,153,172,2,23,185,220,47,65,5,188,144,199,195,132,190,96,174,93,144,180,117,239,56,60,251,81,172,154,209,38,170,201,75,226,173,41,155,189,69,67,57,155,113,100,18,166,81,53,100,15,77,173,53,165,168,134,60,202,175,231,89,17,224,96,11,1,181,91,152,30,46,17,88,215,208,25,178,98,83,171,211,72,105,186,38,100,122,115,31,168,223,99,228,134,72,10,68,206,21,115,170,58,171,29,172,83,178,169,212,211,140,15,112,58,27,122,99,39,135,89,95,46,195,140,94,246,111,179,115,37,141,14,170,39,98,129,49,194,189,19,6,154,81,187,99,195,150,157,154,85,140,94,123,117,39,129,30,236,185,175,230,68,54,165,27,132,86,198,24,42,229,168,244,74,107,243,197,62,25,22,95,44,197,165,92,251,132,186,119,167,214,222,18,37,208,13,12,75,75,99,125,150,171,122,62,78,124,40,112,181,240,228,57,126,7,217,126,
|
||||
71,231,222,4,92,238,128,254,51,47,243,73,53,228,222,17,176,173,98,208,21,157,131,235,1,204,212,15,250,140,186,166,120,60,62,30,106,232,205,154,17,45,60,77,61,46,115,191,156,2,1,161,159,240,124,89,59,216,236,80,91,100,129,197,40,25,84,39,54,237,143,208,173,91,41,251,232,182,240,93,207,102,116,191,183,182,230,53,139,125,178,122,66,220,24,84,127,101,172,204,234,165,37,163,147,16,251,124,236,186,175,197,226,207,101,89,177,79,120,101,41,253,122,7,18,1,239,48,13,159,145,222,168,31,103,72,209,12,165,139,70,53,84,21,12,154,37,236,193,213,182,27,245,177,170,84,247,142,57,167,74,69,113,17,87,95,82,159,68,132,211,237,216,44,2,40,10,131,114,68,153,166,10,48,229,219,180,98,143,128,176,215,86,56,41,116,32,25,146,117,127,106,160,39,8,44,210,251,166,2,205,30,199,73,250,58,118,26,239,219,168,112,236,242,35,247,58,12,196,152,174,227,35,247,121,164,203,58,65,184,136,94,69,61,51,164,243,173,24,199,114,55,95,178,172,77,
|
||||
123,131,111,22,68,124,170,158,97,184,160,123,123,29,116,236,172,7,225,56,201,124,2,18,61,146,4,86,51,9,20,127,170,192,111,183,18,240,230,73,52,75,254,90,229,110,98,2,66,235,187,65,54,68,229,36,234,173,229,156,14,7,228,26,7,138,128,213,70,116,212,31,157,175,93,145,70,224,77,195,196,0,127,108,129,106,233,92,113,98,2,213,62,72,157,116,20,111,34,72,180,114,233,72,65,172,186,218,62,71,183,14,41,1,3,171,7,160,89,52,225,162,81,147,64,243,36,138,223,144,19,138,196,74,49,177,121,174,193,30,248,161,115,25,191,118,65,50,187,243,9,52,90,229,124,234,101,188,99,233,64,53,13,165,128,120,203,70,4,142,55,70,82,207,141,167,161,72,254,26,8,241,97,138,149,147,206,149,39,104,83,134,130,43,86,76,17,240,59,229,220,180,57,77,92,87,89,10,232,0,218,234,160,210,20,145,204,142,105,154,225,211,188,31,197,210,164,6,110,28,233,161,80,236,58,168,32,104,17,8,72,229,124,180,203,211,220,49,148,115,143,156,139,109,18,159,
|
||||
29,7,122,121,97,111,76,176,156,78,183,222,21,6,255,113,120,249,215,54,77,134,254,96,168,208,99,206,145,106,49,111,7,84,159,95,253,17,168,99,217,219,70,170,151,84,127,169,88,252,26,184,195,126,203,140,237,126,157,10,109,107,163,229,161,240,1,171,227,245,77,48,46,128,167,198,236,209,187,22,118,32,159,38,66,97,84,57,60,197,186,112,14,237,70,158,141,9,37,43,170,67,197,65,116,98,60,1,178,12,246,207,212,73,209,104,204,153,225,39,28,202,125,229,177,24,91,79,96,148,200,103,27,155,94,220,193,34,69,238,74,6,126,39,12,226,140,210,231,208,115,103,76,59,14,26,172,201,148,48,72,133,132,216,16,77,141,13,188,161,94,210,165,164,33,58,52,144,27,72,187,210,19,205,175,22,25,201,246,52,223,224,165,59,204,90,58,122,38,146,32,105,105,118,116,10,184,238,217,89,162,173,177,147,66,30,96,86,29,203,146,28,88,197,134,245,25,195,212,11,118,88,80,211,187,53,71,8,170,101,127,255,76,248,104,49,193,128,202,131,75,111,170,137,99,164,
|
||||
239,162,30,85,219,247,178,202,96,114,11,130,157,85,12,17,84,137,36,11,215,208,192,184,238,46,106,184,162,201,94,139,58,132,161,159,248,32,103,176,86,188,82,83,122,69,234,205,154,238,90,224,128,138,117,18,193,123,1,56,45,133,106,236,207,181,180,75,17,125,153,248,133,234,200,162,150,196,70,111,109,55,22,219,166,59,20,77,235,2,100,2,49,45,61,173,75,78,217,209,136,157,15,5,152,83,79,128,195,193,124,21,197,186,132,68,232,233,200,206,136,91,121,122,126,127,74,168,129,229,208,147,210,151,23,29,175,71,75,230,26,141,188,59,60,34,69,145,226,84,55,218,108,198,7,33,208,39,198,166,120,84,150,81,123,120,33,230,188,174,130,121,27,249,211,126,107,128,33,114,180,104,36,205,44,25,90,118,237,24,219,125,4,87,246,92,30,206,25,123,84,46,201,86,75,244,41,147,89,86,172,174,14,57,118,119,102,45,206,1,203,4,10,149,145,242,203,88,79,237,16,83,114,135,2,116,128,241,201,82,45,86,29,206,39,9,118,187,89,61,247,204,72,186,42,114,
|
||||
146,84,89,18,157,132,202,143,85,25,107,76,44,230,116,0,70,192,238,160,12,175,59,134,94,225,87,140,116,91,119,35,199,12,26,41,117,127,158,221,208,107,47,12,19,34,227,224,1,45,60,197,105,161,204,227,60,194,52,27,47,245,145,224,108,73,130,215,98,152,14,58,43,194,150,24,150,96,54,20,73,68,138,239,217,64,100,40,79,94,162,237,9,22,167,3,107,145,152,160,182,160,188,215,30,216,228,144,67,71,96,229,249,90,134,26,170,32,67,127,70,209,222,106,123,183,118,83,248,254,175,255,252,247,127,159,240,191,125,72,237,60,118,241,18,205,69,215,238,47,145,224,165,244,99,235,150,143,53,104,231,143,185,251,8,147,172,104,247,87,198,143,18,252,104,147,237,99,45,230,252,131,131,185,159,208,79,232,163,27,63,146,71,210,126,76,115,48,206,31,117,18,140,109,209,102,31,253,216,101,99,208,236,191,218,121,34,241,167,143,98,250,88,243,96,126,47,30,140,201,71,221,117,213,126,56,237,198,31,31,210,252,49,46,237,244,209,181,31,77,55,205,224,71,156,140,
|
||||
237,71,215,39,99,48,239,103,77,219,52,39,205,71,208,198,31,65,93,119,235,180,219,22,131,157,235,174,255,8,250,190,46,162,96,119,98,250,8,162,168,27,227,253,26,112,198,156,131,141,130,57,1,75,2,3,219,56,24,227,233,199,199,181,27,147,238,145,140,127,249,182,45,2,219,125,132,193,148,252,182,120,29,44,109,148,127,20,243,110,84,92,164,105,50,38,32,36,192,230,248,163,75,129,11,81,94,204,73,52,47,187,47,69,149,124,176,230,21,56,210,126,56,245,92,52,96,207,119,120,210,110,1,187,238,150,253,229,99,77,128,17,99,215,102,245,6,194,90,23,192,122,96,32,8,73,148,39,65,191,95,15,12,105,250,101,78,198,233,115,201,127,255,71,62,207,253,244,243,223,126,194,63,225,117,93,127,254,24,131,169,15,147,17,136,208,226,231,143,110,204,126,194,255,248,48,191,95,251,208,139,191,239,113,14,62,42,144,166,221,135,61,29,191,231,34,104,192,246,123,10,246,20,37,93,95,39,63,190,210,254,71,150,218,110,119,25,216,88,180,115,210,198,73,252,9,
|
||||
131,207,215,246,115,64,198,254,236,100,191,140,125,55,37,239,52,174,221,88,129,76,39,117,253,137,147,239,176,23,47,176,208,27,50,63,62,184,101,220,99,89,127,65,233,35,105,194,36,222,55,218,221,47,234,100,220,67,126,45,162,177,155,186,116,254,240,64,200,247,164,124,153,152,46,53,184,114,90,250,190,27,231,233,115,77,20,125,67,131,67,209,31,31,90,251,113,86,29,248,82,180,203,243,13,128,40,232,131,176,168,139,121,219,221,155,138,166,168,131,241,35,94,146,221,177,101,10,178,100,79,232,127,194,90,8,50,87,255,102,212,143,15,29,196,19,96,4,4,168,136,190,82,7,98,91,2,16,76,31,209,152,128,112,196,187,229,93,155,124,175,17,5,237,30,58,112,89,1,108,110,0,232,222,209,12,192,18,57,112,115,119,191,91,102,240,247,126,16,128,236,11,197,63,190,171,48,238,218,159,255,2,64,215,118,235,103,245,0,7,126,5,73,250,200,3,176,75,187,175,152,60,251,58,40,218,119,10,222,8,248,74,250,167,149,243,24,180,211,187,14,62,43,249,141,119,
|
||||
144,94,96,201,158,205,102,63,229,107,117,224,52,128,223,59,105,97,13,138,98,251,190,226,19,152,223,112,209,218,119,208,246,240,134,69,150,237,5,22,196,15,192,25,95,209,252,3,78,159,11,127,90,245,174,104,192,21,96,69,16,192,175,216,253,248,16,0,160,222,149,186,131,19,108,210,0,108,142,83,15,142,21,143,228,47,251,197,81,7,136,170,8,151,249,51,126,251,201,192,232,101,220,115,186,39,30,24,252,153,225,79,12,6,96,175,122,234,126,37,5,120,241,137,246,143,116,236,154,223,170,57,90,234,189,128,191,172,204,131,248,35,235,246,88,36,5,192,224,218,126,20,49,72,221,190,99,209,0,107,65,189,2,167,126,133,224,55,87,126,47,155,221,184,52,136,230,183,83,187,239,159,151,78,187,191,111,170,125,124,219,89,124,153,25,128,93,187,248,123,45,16,189,61,223,0,122,89,242,227,6,64,176,131,40,29,147,100,71,253,188,196,159,30,71,121,208,102,201,39,190,247,108,10,187,99,205,246,182,26,128,33,25,139,164,221,13,251,130,3,72,18,56,23,160,251,
|
||||
47,0,143,81,176,76,239,67,95,108,183,35,237,23,91,164,59,166,198,119,25,237,139,119,81,4,192,187,211,215,155,184,195,169,27,195,79,115,193,182,239,106,153,55,16,215,221,164,207,235,115,0,213,125,183,63,56,245,147,18,246,51,64,33,3,239,227,37,168,63,146,58,105,246,12,236,36,51,6,123,5,189,185,32,9,0,231,190,139,227,7,192,16,48,253,87,40,118,63,0,103,111,123,60,65,225,239,237,105,39,162,116,25,223,165,244,133,247,6,0,231,59,65,223,177,3,228,209,214,29,200,237,47,182,111,0,20,230,61,158,239,21,64,104,63,113,177,3,253,147,114,127,99,220,229,139,233,250,254,139,112,247,87,255,9,176,207,154,132,63,255,233,123,237,159,255,148,180,63,255,186,76,63,127,228,115,83,255,3,16,96,56,129,246,240,247,95,149,188,183,188,119,47,109,247,190,3,90,65,94,100,57,176,96,76,128,57,205,47,158,253,101,235,142,104,16,215,49,121,115,206,244,141,151,189,59,238,56,8,0,128,223,33,109,64,47,251,232,187,186,152,242,125,133,29,112,
|
||||
45,88,121,63,41,92,138,58,254,21,13,107,239,68,211,103,188,65,185,130,212,253,175,95,17,218,137,105,223,253,223,255,49,119,125,17,125,122,15,176,255,19,6,173,245,39,124,78,230,253,124,107,111,241,201,47,87,255,241,241,246,16,240,18,88,112,247,232,139,131,128,233,73,191,151,220,251,223,29,14,243,119,37,190,17,181,147,225,206,23,223,12,5,174,248,22,19,111,8,124,102,233,199,199,121,7,89,189,68,213,255,248,18,43,78,11,232,96,156,246,154,223,235,0,160,103,250,179,102,217,99,28,252,162,170,143,41,250,172,129,175,147,119,169,178,159,245,89,67,191,218,64,49,38,111,249,243,142,221,207,127,153,126,23,38,31,25,240,103,255,253,247,138,250,51,137,1,112,199,63,126,5,242,83,5,189,25,19,184,151,38,211,94,58,0,237,123,31,91,119,243,190,36,203,14,253,191,128,43,0,244,190,77,248,238,134,206,59,18,123,106,191,3,225,37,111,207,222,187,130,80,182,201,250,205,102,159,234,97,223,247,179,27,130,110,246,185,200,39,131,77,85,81,215,159,149,
|
||||
23,142,111,151,64,230,243,63,72,109,55,51,5,41,72,246,10,253,198,137,151,111,255,15,119,247,6,218,253,81,130,255,235,67,40,64,183,120,11,162,186,254,203,127,230,148,46,156,223,144,0,110,143,32,14,17,96,108,208,227,234,111,211,222,14,172,224,215,189,75,182,73,178,87,193,183,220,252,174,236,61,74,227,91,89,205,59,33,68,59,165,188,21,234,126,217,31,156,3,54,219,221,248,244,255,79,4,244,190,182,73,130,118,205,65,223,252,36,178,63,218,220,215,197,221,183,53,223,161,252,45,83,159,12,246,135,9,217,216,45,253,30,227,241,51,51,243,218,253,225,217,155,101,191,214,218,189,222,222,114,0,180,249,58,254,236,227,63,255,250,241,134,49,128,220,187,173,117,245,159,5,236,255,156,22,192,129,32,67,103,201,254,248,249,207,31,150,171,254,235,59,135,255,53,53,141,73,12,100,30,40,219,111,89,242,19,6,222,252,227,187,211,130,158,217,130,254,252,118,233,83,160,252,253,227,127,154,159,215,252,235,175,252,255,10,226,187,185,191,43,245,19,109,197,103,71,
|
||||
0,36,190,0,29,11,90,152,218,189,157,253,84,57,221,174,219,191,145,255,173,55,223,105,254,202,114,48,3,157,59,189,195,253,27,190,190,194,188,75,222,119,250,118,71,87,16,203,228,11,195,123,22,127,149,64,240,174,161,247,114,111,201,242,77,169,251,86,123,255,125,199,251,211,166,29,41,59,56,222,11,190,245,79,31,236,45,127,111,43,32,111,160,184,147,255,151,34,7,156,188,180,95,41,249,84,49,201,46,170,127,124,176,211,151,141,160,239,38,227,14,238,189,141,236,67,65,0,42,163,94,222,23,164,159,84,243,14,5,96,241,230,55,145,253,139,254,214,224,45,209,63,25,35,248,243,112,245,127,84,28,56,237,107,135,112,201,222,187,199,192,216,199,187,3,236,216,25,187,126,44,118,122,237,247,24,191,91,197,23,224,128,31,160,174,118,165,20,236,162,25,80,117,251,89,59,123,168,227,160,248,69,58,191,203,249,223,185,231,18,236,76,186,125,209,91,177,55,206,55,124,222,222,237,90,35,77,130,183,130,250,83,163,251,157,66,11,16,249,98,252,26,129,250,79,5,
|
||||
253,40,166,125,174,250,111,181,219,108,234,162,63,250,237,254,23,134,160,196,255,217,111,65,179,200,0,68,173,101,87,0,59,29,113,0,55,127,127,119,168,239,224,255,38,184,192,180,50,21,123,123,221,73,227,13,182,183,63,32,201,19,56,101,231,140,183,144,127,231,185,216,241,244,197,202,255,137,44,133,223,20,200,0,100,205,47,5,63,253,229,93,220,64,216,236,156,252,40,130,183,183,93,10,142,23,128,36,254,107,183,65,232,150,102,218,199,187,247,111,127,255,82,88,239,229,222,52,50,127,15,211,223,147,250,31,236,183,128,108,216,251,120,12,166,61,128,239,224,219,191,47,210,253,206,102,191,87,236,180,231,116,251,203,39,116,62,23,29,147,62,0,149,7,176,246,227,171,243,158,246,27,163,127,150,2,88,176,152,223,40,159,126,129,26,196,172,223,81,252,53,16,128,95,139,168,126,35,55,136,99,128,141,233,83,219,124,209,8,88,30,188,6,64,244,110,172,255,215,149,191,193,180,247,240,28,80,243,222,186,151,63,186,127,241,135,140,249,92,121,151,179,95,226,110,151,
|
||||
254,127,188,13,1,78,121,87,17,152,49,246,137,244,45,245,190,206,223,91,213,91,146,130,10,4,135,118,161,220,126,201,233,47,253,80,7,225,119,158,127,155,88,147,239,161,108,87,245,160,149,126,205,163,127,106,247,111,73,55,190,51,253,213,78,128,236,6,115,94,241,89,34,121,240,72,222,51,31,224,158,5,192,112,250,93,248,252,74,79,0,152,102,88,118,169,214,125,190,51,242,255,137,160,111,95,190,114,122,4,5,80,236,68,221,231,219,119,133,52,160,59,76,255,246,249,87,141,82,200,223,10,148,68,254,166,33,127,251,143,255,248,15,28,251,219,159,223,143,232,139,103,16,6,219,207,31,192,219,159,48,40,71,248,59,114,63,255,10,128,87,128,1,232,231,95,235,160,233,193,207,34,28,131,113,251,249,87,6,65,105,242,176,219,244,94,232,223,224,239,85,246,69,192,26,255,237,37,96,208,185,236,98,222,81,182,27,253,175,127,255,251,255,6,93,233,228,138,
|
||||
165,149,246,239,89,32,33,44,97,6,150,190,249,5,235,185,91,99,9,2,102,183,23,159,90,207,22,23,147,50,187,80,100,182,166,209,178,225,199,212,37,82,156,133,112,62,109,146,38,182,54,227,95,105,239,181,228,184,182,101,135,254,74,222,136,14,73,29,56,189,225,93,247,131,2,4,8,194,144,240,142,84,156,142,130,247,30,32,8,62,244,183,107,129,89,85,123,159,214,189,146,34,238,75,86,38,1,172,53,205,152,99,142,201,34,1,108,183,201,34,68,234,116,174,129,162,225,189,129,173,5,229,228,180,32,8,86,112,121,58,248,57,114,188,5,157,238,193,227,220,158,226,203,70,237,12,42,171,101,17,224,245,213,182,111,170,157,148,55,56,15,25,104,61,61,47,42,201,232,138,70,32,228,35,130,79,243,237,237,230,143,171,139,129,162,207,64,224,218,156,168,173,107,142,45,10,121,167,251,196,215,97,103,69,166,147,47,106,77,166,110,140,178,34,69,166,191,193,208,236,233,37,27,196,58,89,121,117,29,28,119,23,0,147,19,24,61,174,38,147,0,127,57,175,176,61,
|
||||
153,244,34,65,23,7,146,111,252,155,170,146,88,70,74,143,160,76,224,10,202,58,18,241,217,84,196,166,6,172,41,123,59,97,153,195,232,131,248,111,207,0,182,199,7,111,237,183,198,158,119,194,124,175,186,245,32,145,92,194,60,1,71,211,57,242,167,130,187,141,248,224,11,44,91,188,161,19,140,78,167,203,10,33,213,166,17,51,197,67,88,114,161,0,99,38,247,240,158,57,89,36,156,159,243,195,245,94,187,253,166,227,224,121,102,222,15,192,18,157,85,117,184,183,123,253,219,108,71,185,93,19,25,155,124,168,149,208,107,142,251,42,174,158,238,65,183,218,125,58,99,79,105,110,64,229,158,37,201,110,86,37,230,8,41,104,91,1,77,132,121,98,43,170,95,132,49,159,144,198,77,50,80,179,35,223,73,44,241,144,8,36,211,151,166,66,213,134,159,134,104,122,36,91,158,247,158,114,15,107,81,97,182,193,60,30,233,167,14,108,203,226,90,45,180,177,48,102,240,205,234,24,203,222,175,99,209,92,243,115,121,33,246,167,177,44,234,27,238,195,94,210,121,69,112,122,
|
||||
79,14,244,55,187,117,124,112,246,113,123,188,58,248,184,62,2,44,133,150,69,79,88,200,178,220,58,113,16,110,212,157,245,253,16,67,63,72,12,170,143,35,35,199,111,247,29,104,151,115,5,67,154,61,226,212,156,73,106,49,210,12,94,23,76,140,195,220,41,163,16,248,197,58,207,251,169,54,49,180,98,31,131,229,64,167,93,5,114,88,115,138,92,176,30,45,209,179,221,181,76,226,69,197,253,55,70,97,183,192,65,154,122,176,40,229,248,159,240,60,135,182,137,127,10,67,217,107,219,92,133,111,100,152,52,220,97,158,230,66,60,86,51,103,17,12,141,239,20,225,56,251,94,73,42,208,225,134,26,167,90,84,221,129,94,136,36,147,3,69,123,124,174,247,102,45,172,213,118,218,192,174,62,190,107,187,251,212,224,177,200,110,39,102,76,4,85,238,138,205,30,238,37,56,136,150,164,59,99,236,11,167,61,247,37,130,86,85,224,109,34,201,69,80,114,14,250,114,173,103,39,226,182,56,249,195,210,198,215,156,210,86,91,174,167,75,134,63,31,211,67,159,82,238,121,194,
|
||||
3,27,125,134,45,145,97,47,202,124,38,110,171,139,175,96,134,178,27,50,232,14,99,134,163,225,226,119,149,72,3,249,26,35,205,164,178,152,183,145,164,63,84,78,204,214,41,109,80,218,27,228,26,125,207,33,45,234,202,77,176,130,106,98,143,167,109,110,28,119,189,37,96,136,160,186,142,140,102,239,89,108,109,19,137,209,118,157,186,43,65,80,202,5,127,13,128,181,124,214,127,219,80,221,248,158,83,218,173,161,100,238,48,103,169,207,196,89,174,174,58,208,131,247,136,120,249,65,23,35,120,156,232,84,249,216,82,239,122,94,92,141,160,19,157,206,128,52,39,174,163,68,205,196,157,113,18,1,163,94,175,137,236,47,172,137,17,222,108,98,16,53,94,150,23,16,173,183,126,60,37,17,89,167,70,23,200,105,236,227,167,247,229,30,82,30,17,76,75,223,52,76,131,185,96,151,74,72,100,88,125,101,215,16,189,218,55,142,37,248,38,64,199,24,171,74,177,215,201,158,12,46,83,17,162,147,238,137,5,174,198,16,35,77,94,118,51,0,148,201,199,205,187,22,151,61,
|
||||
231,196,123,255,74,158,8,244,76,206,247,101,100,144,115,37,237,211,78,212,87,33,78,31,3,93,46,211,205,103,248,46,23,253,250,66,71,87,57,158,161,97,99,132,245,188,95,54,227,229,148,141,115,219,105,211,203,6,185,27,120,139,165,110,148,208,145,234,11,74,188,243,155,139,30,94,123,141,27,249,69,168,20,236,186,172,121,197,211,41,60,225,46,107,231,134,76,78,225,123,137,46,179,24,219,47,188,208,30,74,129,135,168,93,225,152,149,208,214,244,218,89,252,194,177,82,1,154,155,74,191,194,56,143,41,167,210,141,202,139,25,25,147,122,236,73,156,178,71,28,241,129,88,55,54,111,112,104,22,178,9,152,223,118,84,55,49,166,174,226,171,229,26,207,183,183,172,251,78,71,132,141,225,101,70,75,209,9,146,41,15,191,157,96,183,174,130,133,152,19,20,81,119,98,228,13,217,126,65,64,118,159,32,19,131,55,46,161,107,168,206,135,120,13,110,183,132,191,41,147,123,187,164,197,170,23,151,228,213,49,128,170,169,171,51,148,4,28,46,216,26,39,173,141,77,157,
|
||||
98,111,164,156,156,128,74,5,83,137,227,237,161,129,226,49,205,62,106,156,223,181,57,44,202,222,105,66,98,10,93,125,201,158,189,154,247,217,205,195,42,44,87,98,93,198,150,88,72,232,100,127,191,116,73,188,21,167,113,45,188,110,9,78,146,44,10,153,142,157,28,101,12,156,52,215,44,99,14,4,15,106,175,150,158,148,103,113,161,194,13,104,110,50,106,123,232,53,117,14,51,235,125,171,237,61,211,212,49,222,99,60,54,195,65,218,39,163,227,89,43,50,156,85,121,113,99,114,111,128,28,99,152,9,231,36,93,77,184,109,215,222,28,26,60,89,140,138,31,152,142,112,139,125,45,203,123,130,45,98,143,10,131,69,150,180,77,196,13,117,146,151,179,136,26,217,235,248,207,252,192,27,244,221,71,37,222,237,244,91,39,222,214,149,181,2,8,14,249,48,94,253,10,167,175,130,39,63,252,125,117,110,143,56,78,141,73,209,207,178,162,198,231,84,83,83,105,109,163,38,76,44,127,129,88,195,185,35,9,150,178,89,84,35,203,54,184,108,68,167,88,176,21,96,174,183,
|
||||
7,98,30,182,204,16,229,85,65,201,21,125,33,100,244,180,228,122,151,34,188,221,88,3,44,239,202,172,236,206,147,201,59,164,104,189,202,133,137,184,183,80,119,109,182,76,80,2,134,39,230,217,113,210,21,120,234,209,168,39,214,91,75,146,239,229,61,192,196,136,5,195,229,113,46,195,104,161,35,102,89,132,226,206,239,188,213,101,3,36,222,95,139,197,173,214,27,37,139,227,187,14,209,132,28,31,54,110,7,246,134,233,215,251,18,88,214,40,66,248,237,169,251,37,61,143,133,97,156,171,196,125,56,57,31,212,15,140,175,73,233,41,217,163,179,196,208,249,161,209,18,234,17,195,197,218,49,134,169,88,177,190,150,77,220,191,104,39,190,191,208,102,107,31,188,43,42,199,157,15,83,205,54,2,151,28,164,48,86,241,135,170,71,117,73,168,141,160,176,65,56,105,68,25,114,206,112,117,249,1,154,23,99,197,182,33,6,212,203,94,140,169,238,26,251,60,94,246,185,219,53,179,164,236,254,140,177,118,226,188,146,147,125,54,76,251,68,89,70,104,111,222,96,161,126,78,
|
||||
143,178,180,13,173,116,39,139,71,71,134,157,179,185,109,172,152,176,50,37,66,246,130,40,164,47,105,149,116,153,221,237,238,110,249,188,204,87,229,222,143,195,66,183,139,137,185,213,184,152,39,143,206,245,193,216,198,254,245,42,231,186,69,245,64,141,146,129,50,11,194,194,136,164,5,26,65,73,12,160,116,68,167,83,155,197,40,106,244,180,196,239,201,27,27,76,134,239,215,78,43,251,170,17,106,20,34,52,168,182,75,135,194,19,69,79,105,107,65,213,24,173,163,227,203,236,167,176,179,151,80,243,110,90,20,7,126,212,37,34,224,207,162,182,128,37,181,206,81,182,215,220,245,179,177,155,90,221,95,226,226,132,235,170,25,158,144,157,84,159,49,239,168,237,251,218,3,29,131,45,187,15,45,68,31,165,60,11,37,182,181,228,103,104,84,77,202,71,162,120,122,159,130,88,206,75,173,141,20,95,17,198,22,61,61,204,227,107,246,17,246,174,128,244,73,150,74,89,92,165,60,35,132,199,238,216,5,98,192,232,175,114,12,227,129,177,114,35,16,52,97,154,86,143,206,250,
|
||||
76,105,158,140,143,138,180,192,23,158,177,238,187,221,12,215,50,117,31,240,93,12,165,57,220,35,227,4,108,217,42,102,124,63,51,175,102,2,186,237,235,135,90,131,30,193,169,43,246,14,120,179,60,238,160,230,118,92,104,159,218,246,92,19,201,0,112,10,122,43,38,129,185,105,120,67,104,89,156,76,64,151,78,219,90,34,146,81,170,93,35,113,73,230,16,210,129,92,154,142,203,244,126,157,93,154,200,41,168,199,208,60,58,77,165,198,151,205,22,236,16,204,171,2,45,231,177,167,17,74,137,37,231,221,3,86,38,105,164,136,2,242,156,169,85,189,74,219,168,89,106,153,73,15,120,77,121,80,237,12,238,35,134,66,65,15,110,58,97,185,191,143,196,43,230,238,36,34,224,160,86,241,21,241,84,250,153,39,147,192,142,252,57,243,94,242,116,198,5,226,140,219,106,93,65,136,105,84,79,175,13,159,124,160,12,151,167,45,89,247,171,95,71,102,21,161,247,42,35,189,58,171,212,94,168,0,139,25,16,246,48,32,211,155,42,199,180,241,97,199,250,119,213,148,75,5,
|
||||
95,125,107,213,76,50,189,233,125,2,141,152,131,192,15,209,168,217,21,98,149,82,162,100,41,22,39,106,91,79,94,155,75,3,108,249,79,232,236,174,160,209,44,142,55,0,69,220,60,117,8,228,8,206,197,171,119,242,227,234,53,146,151,193,187,64,187,24,70,225,6,98,36,132,148,41,251,6,135,140,81,16,8,65,96,147,60,165,219,107,109,139,105,34,157,238,140,90,150,94,140,23,1,255,52,10,203,72,83,40,87,147,81,150,95,33,229,172,58,248,107,138,153,202,126,188,144,74,238,71,57,196,77,109,15,157,213,174,7,202,181,41,186,210,148,102,122,19,168,120,238,3,13,92,175,14,215,2,130,178,201,82,222,1,150,101,174,187,100,118,80,22,115,157,100,122,27,70,209,221,123,69,110,25,93,194,250,228,191,104,48,105,66,134,223,37,168,148,202,106,76,188,237,147,227,80,96,224,91,24,117,22,236,147,23,82,3,33,134,2,170,93,192,212,26,221,112,60,100,200,200,45,174,83,10,211,234,22,14,79,87,186,191,230,249,97,213,148,218,25,152,71,202,172,231,77,
|
||||
205,181,168,83,223,141,150,17,186,79,158,21,227,219,162,72,64,109,152,230,28,17,96,170,130,238,227,106,198,77,49,146,204,13,66,188,222,178,60,238,89,219,208,171,125,215,26,238,95,124,137,55,98,88,98,93,248,220,247,163,248,74,81,242,222,20,149,247,20,40,198,226,58,172,235,109,196,105,179,170,57,241,64,3,42,62,41,201,83,184,230,155,17,135,247,104,233,43,135,197,249,167,19,121,151,68,161,70,94,183,2,16,29,253,4,6,116,128,83,160,101,3,155,69,98,71,242,226,214,53,70,120,238,54,95,202,138,93,63,41,198,46,58,250,117,196,80,59,231,36,174,51,28,192,141,46,254,32,144,42,109,155,133,221,93,197,235,80,169,173,129,200,52,81,79,35,233,171,70,47,106,201,246,20,235,220,229,211,126,54,31,22,61,195,80,73,54,18,226,88,189,244,224,234,170,158,56,97,153,91,101,7,141,218,40,45,235,182,191,205,107,35,121,66,51,68,245,77,186,207,207,222,166,48,11,162,38,53,219,198,122,64,59,130,162,244,148,148,122,230,66,207,10,140,237,222,
|
||||
6,52,183,154,171,102,198,112,188,170,222,9,220,153,206,84,115,60,80,99,194,67,241,76,208,175,216,221,47,2,35,93,210,8,190,157,220,190,0,212,171,46,118,210,118,197,53,131,24,159,238,91,233,156,4,107,48,221,151,88,203,94,27,150,58,212,160,185,248,152,205,87,172,192,50,118,12,3,32,25,238,64,190,197,91,5,82,80,218,120,183,73,169,38,242,185,65,15,35,77,11,175,106,22,9,57,2,74,73,145,3,98,233,19,41,21,136,254,248,68,110,57,60,36,52,138,30,50,111,207,194,38,27,133,59,35,35,105,106,77,137,177,108,91,149,248,157,25,43,172,20,82,172,134,211,101,6,51,184,5,175,93,106,101,251,37,204,23,124,17,113,100,30,34,127,152,148,248,106,15,139,162,56,70,121,125,188,25,190,231,36,242,140,82,183,33,91,234,65,55,135,211,155,112,79,20,246,34,133,211,125,111,28,117,157,194,89,141,140,151,157,121,90,16,169,132,90,84,74,208,78,27,178,116,67,248,104,32,23,225,148,104,48,241,189,186,43,96,236,27,179,233,46,132,124,178,
|
||||
182,153,186,60,240,42,79,54,122,5,230,121,161,147,191,130,38,26,211,252,228,42,111,163,131,10,213,173,97,17,140,103,97,78,223,232,115,177,152,179,62,61,16,179,190,11,49,166,151,110,158,225,53,139,61,25,10,221,238,165,174,173,110,161,212,101,74,162,64,252,116,222,60,33,163,143,115,145,55,59,111,21,226,70,35,0,195,178,182,181,180,119,142,247,44,76,93,195,216,71,74,243,217,166,171,78,81,167,220,214,119,63,179,180,202,214,80,249,54,55,234,12,111,60,157,241,26,156,247,168,141,141,186,212,62,23,249,42,163,1,128,25,214,115,48,90,143,231,89,83,33,33,63,153,89,61,206,204,188,96,214,219,145,49,142,243,91,94,188,120,215,102,185,21,186,59,197,118,158,50,53,49,2,153,201,185,102,103,44,18,5,166,81,210,11,252,214,108,48,218,42,115,197,109,22,43,102,93,242,68,90,8,180,248,73,66,135,87,37,126,156,229,201,95,154,34,68,250,216,63,53,150,67,219,78,245,58,1,253,138,51,212,196,105,188,247,120,185,103,212,72,209,27,149,39,119,
|
||||
167,80,42,77,190,144,155,176,52,1,137,46,198,60,133,54,225,49,89,122,169,67,156,241,68,32,71,155,68,230,206,54,182,121,19,121,69,67,66,53,83,95,31,88,190,54,174,145,157,96,72,62,10,161,237,230,196,214,220,90,34,72,186,171,125,109,27,90,137,167,225,222,243,36,187,45,245,3,114,137,81,45,156,169,236,46,245,100,220,192,80,12,49,96,204,91,86,52,169,164,25,244,59,250,30,38,43,44,80,92,233,34,105,178,122,124,18,151,246,89,101,64,235,28,212,25,161,236,243,18,245,116,182,122,190,241,214,251,5,243,244,16,212,149,162,79,133,17,167,112,29,106,104,49,58,14,191,213,181,245,200,157,184,31,29,130,107,130,228,201,101,120,227,121,17,126,111,105,43,16,226,150,138,245,107,197,175,54,1,242,212,88,10,66,167,18,49,179,91,213,119,107,224,45,39,195,101,197,43,147,46,145,3,70,237,37,13,131,144,158,138,225,245,122,150,247,146,231,241,112,241,230,225,121,115,239,148,34,12,170,194,159,224,204,179,162,134,37,72,208,138,47,139,46,92,61,
|
||||
184,236,217,145,8,193,12,250,56,201,204,251,92,199,85,15,241,158,58,157,65,19,193,150,144,243,241,62,132,141,119,59,123,48,124,78,176,73,23,234,218,92,21,245,210,249,199,13,184,140,113,68,38,154,200,37,204,82,34,33,44,29,66,234,2,151,2,49,18,212,19,21,212,203,60,83,21,113,15,248,171,236,90,239,117,123,80,65,107,11,85,162,30,31,82,23,198,116,124,10,151,24,29,32,60,142,33,81,239,37,131,156,240,202,157,0,175,27,105,63,238,212,88,76,185,174,26,212,51,222,235,130,135,107,199,121,140,211,220,196,39,45,150,3,45,37,98,43,178,89,197,201,3,193,161,201,133,212,179,51,104,146,77,0,129,6,136,229,84,217,164,93,68,15,3,242,120,17,132,30,190,249,83,200,166,254,170,50,68,29,215,58,101,180,130,170,46,51,17,102,124,178,64,189,162,249,193,201,145,253,189,140,66,48,62,188,192,52,186,60,173,166,120,45,97,118,83,109,187,6,114,48,100,225,250,221,41,74,32,19,25,115,63,235,195,197,46,133,177,84,61,129,197,145,82,235,
|
||||
168,102,236,187,225,10,57,48,237,105,67,108,179,161,246,8,163,57,191,199,100,125,145,210,161,34,222,8,153,99,200,107,167,171,77,55,82,181,13,192,224,53,180,28,126,242,25,108,34,19,226,157,155,212,208,144,18,29,166,94,64,184,207,59,170,110,30,103,203,213,20,62,209,250,172,114,176,140,122,248,41,40,224,151,70,4,225,213,27,166,146,124,221,145,119,86,190,159,167,58,184,220,168,210,147,148,216,29,194,64,2,211,170,104,200,236,61,238,229,147,83,93,108,109,236,106,11,8,243,73,136,252,241,142,110,177,228,105,83,46,210,10,139,39,5,1,87,206,133,240,222,175,129,41,179,250,44,57,75,4,113,217,109,12,204,37,24,236,89,187,225,139,236,193,51,222,8,6,226,193,124,135,86,222,149,50,13,91,126,95,115,3,111,209,120,128,75,181,188,101,206,171,25,164,30,170,39,90,150,168,55,98,32,137,2,69,99,11,239,3,156,135,222,211,118,153,41,233,202,173,62,131,57,178,29,148,19,36,132,94,214,185,186,148,226,119,8,42,216,172,207,149,182,99,20,200,
|
||||
116,235,50,44,114,131,224,87,232,97,208,33,152,188,173,182,75,175,55,179,63,191,148,59,14,56,138,172,12,100,212,111,161,191,26,32,50,137,92,101,107,120,247,137,108,28,76,137,112,231,8,153,95,181,8,209,14,74,192,216,35,122,192,132,75,194,151,49,150,65,61,57,5,147,45,246,170,232,185,177,65,212,105,20,10,178,23,188,53,35,145,80,153,147,183,159,78,21,35,74,41,12,115,226,57,191,130,171,136,39,254,16,9,3,191,171,94,136,93,159,119,92,76,12,75,233,50,173,130,8,70,204,242,222,139,227,164,57,63,142,249,217,41,235,101,224,205,64,108,194,242,68,142,58,105,60,181,203,227,229,171,17,111,238,29,138,229,144,125,87,101,148,223,179,81,152,237,160,232,175,193,144,249,205,210,230,209,16,118,47,244,229,193,66,107,129,33,78,5,186,90,122,148,196,27,43,88,59,208,36,227,10,134,198,122,35,133,120,184,24,241,101,247,64,63,138,152,61,211,243,154,38,95,79,18,205,141,59,38,94,167,30,130,105,108,124,86,66,209,135,65,75,85,230,84,243,
|
||||
119,50,162,17,134,193,64,207,41,246,231,224,98,102,156,141,35,7,246,72,145,106,12,73,188,43,197,136,120,211,19,117,127,71,101,91,34,67,234,94,213,24,154,221,156,203,212,103,176,18,150,236,161,143,91,74,153,61,66,246,21,166,56,106,80,195,214,93,243,196,100,221,193,132,75,162,168,147,221,51,33,189,62,162,178,176,124,69,108,235,117,99,70,3,144,191,90,34,233,147,106,146,137,179,238,17,111,132,228,164,14,15,101,86,237,173,88,193,68,64,190,223,131,112,126,87,70,236,31,119,185,63,107,80,120,102,158,178,171,184,55,229,36,169,89,231,109,97,76,4,190,79,196,110,162,97,137,91,158,134,22,193,83,79,173,158,184,114,188,161,60,221,192,156,120,101,239,220,64,191,212,248,241,170,90,229,237,237,97,69,159,154,60,69,99,114,18,236,236,28,38,128,171,51,129,234,181,125,217,37,108,174,46,123,224,55,178,175,119,101,205,134,42,122,197,50,93,65,252,228,84,99,144,16,209,243,251,220,40,233,169,116,206,197,93,42,83,58,33,29,246,134,34,190,241,216,
|
||||
176,60,34,159,121,99,220,153,167,162,161,193,203,191,95,146,128,209,146,59,245,92,160,50,210,38,61,69,22,202,164,94,138,143,188,241,44,93,101,229,100,74,60,111,213,199,221,34,130,98,120,218,88,195,42,183,4,125,92,227,109,75,71,188,57,79,137,159,105,14,224,25,216,159,199,151,206,25,98,100,29,159,37,211,195,30,113,178,235,233,126,74,59,50,138,119,208,34,92,237,169,21,219,104,250,29,199,231,12,150,174,105,19,66,136,200,63,208,100,84,113,204,90,76,115,135,232,247,30,136,201,165,167,56,111,157,140,205,108,188,199,35,6,168,91,110,190,255,54,205,187,55,222,87,65,31,35,48,199,199,114,221,42,67,170,81,184,154,6,92,243,230,5,226,177,111,57,188,162,221,51,192,37,242,210,39,110,96,20,220,171,39,33,229,82,169,46,245,74,36,82,210,40,187,233,226,134,55,111,220,195,104,129,13,119,162,118,166,172,135,144,27,70,140,118,142,81,162,178,50,181,160,59,114,51,185,148,86,61,107,141,69,106,97,34,188,106,178,181,53,139,145,87,76,227,201,
|
||||
69,76,27,135,174,148,70,19,223,104,163,105,35,168,231,26,78,78,220,187,108,247,160,35,2,165,191,116,217,154,85,161,39,208,146,56,121,47,133,89,131,109,16,125,246,45,190,116,171,202,32,45,68,144,231,75,121,162,79,100,18,17,252,37,34,37,62,69,38,213,34,23,69,202,94,148,21,197,130,100,92,82,142,196,202,91,36,232,39,226,62,41,103,3,230,174,219,126,60,87,180,242,143,55,181,211,192,138,69,33,162,206,70,90,137,215,76,207,60,126,97,30,44,22,214,76,39,20,39,142,132,19,91,201,235,250,234,32,208,222,122,13,154,141,251,35,234,48,157,79,71,31,146,151,54,180,189,157,21,194,153,119,146,251,219,164,216,45,224,117,216,62,33,170,200,193,103,180,54,150,43,133,18,57,6,251,113,43,246,87,139,25,119,192,10,210,195,139,163,148,96,6,242,246,120,131,222,39,91,239,92,215,42,195,51,58,100,172,239,176,72,151,201,32,5,46,134,224,186,73,198,81,142,198,221,249,212,169,45,238,174,205,70,92,85,132,112,43,29,187,69,222,26,138,211,78,
|
||||
5,142,83,63,36,201,177,212,137,177,46,230,57,8,101,42,199,125,156,78,247,229,46,169,80,157,202,193,147,166,12,49,134,116,48,54,157,49,221,222,196,162,49,46,106,114,159,92,160,187,189,33,201,204,229,145,208,219,9,229,177,230,129,115,36,147,231,104,116,169,214,235,165,136,134,200,85,34,68,26,193,4,105,222,166,10,216,80,88,204,124,231,38,199,145,132,171,153,176,15,246,54,211,181,77,108,184,91,56,17,213,103,9,179,219,55,194,45,204,157,55,206,105,162,159,179,2,195,31,152,187,248,67,83,12,11,183,157,231,165,208,79,76,225,17,164,95,160,182,104,209,82,237,111,39,47,27,112,48,156,165,84,130,225,3,110,95,6,226,125,217,236,168,166,182,129,119,97,14,90,188,98,107,98,171,22,235,128,199,252,197,230,42,86,37,223,163,57,216,207,24,132,192,110,246,75,212,69,77,39,221,12,233,116,124,168,156,204,102,251,124,62,179,182,26,18,22,112,8,39,225,176,241,134,90,97,19,52,13,32,212,210,216,43,14,219,184,65,179,188,123,85,76,251,220,201,
|
||||
210,200,79,237,140,121,254,174,166,110,134,222,241,177,215,238,198,162,18,251,142,230,64,15,222,155,169,225,36,90,12,188,123,79,171,180,114,246,109,211,70,244,162,199,161,220,16,185,128,50,179,147,192,185,218,187,44,114,200,196,122,100,67,107,210,164,153,82,21,40,157,233,140,241,12,243,77,94,232,90,111,223,138,0,192,218,71,230,42,211,228,173,8,109,173,52,26,235,253,144,113,205,71,188,196,37,150,231,213,54,185,167,244,30,124,252,150,156,94,111,146,153,17,116,112,211,162,103,249,106,201,17,203,230,11,41,244,86,254,181,153,168,154,215,194,243,124,211,96,15,213,30,18,145,44,205,206,108,5,249,84,168,236,178,24,236,192,146,118,42,136,152,233,192,190,45,143,6,188,10,48,119,158,110,157,32,199,40,148,203,18,132,219,55,79,134,113,115,116,36,214,8,158,65,159,61,72,71,72,134,66,99,94,39,71,138,36,200,245,234,169,138,9,225,149,60,73,201,10,226,243,57,91,203,69,127,73,245,80,206,131,186,86,161,5,113,147,106,92,128,88,238,74,52,109,81,
|
||||
125,56,169,190,147,119,25,102,121,164,22,200,55,209,130,76,31,176,146,237,195,228,19,195,91,201,151,209,39,156,136,186,141,99,51,171,47,102,230,36,155,199,2,225,164,4,29,84,46,194,29,158,203,174,57,191,24,72,187,93,71,197,190,148,88,181,121,155,182,158,147,16,72,26,121,184,212,110,92,201,6,16,123,235,218,236,30,164,163,130,80,240,107,208,232,183,7,185,204,153,240,30,64,104,220,152,79,27,190,57,3,217,13,70,89,40,225,222,166,39,109,111,119,176,178,107,96,131,126,29,151,149,56,14,58,17,202,124,169,198,178,38,214,185,135,166,25,231,30,103,139,167,68,55,244,231,12,65,229,62,17,232,118,29,85,25,65,154,148,245,252,208,80,217,209,121,118,170,227,186,86,216,144,24,24,217,65,0,246,98,176,222,213,137,69,57,245,77,116,98,76,50,136,119,150,151,58,221,159,198,170,113,222,123,56,222,68,54,244,149,129,159,19,113,101,142,143,207,11,170,96,217,216,197,131,144,90,98,4,107,7,125,10,12,155,189,228,169,115,74,32,238,185,172,177,209,
|
||||
144,77,31,29,248,26,44,180,200,174,90,54,4,113,15,131,53,247,112,182,3,124,148,120,55,169,54,16,42,43,92,196,208,181,249,1,137,39,21,233,176,162,44,121,51,247,243,49,103,93,48,61,59,30,97,79,235,182,63,51,217,185,86,67,144,67,64,53,27,245,9,116,155,108,102,66,116,150,38,42,89,151,253,30,89,136,185,195,148,137,86,112,178,198,16,56,197,223,26,197,124,78,79,38,116,86,19,107,146,243,157,37,70,34,77,195,83,132,248,10,255,126,105,51,191,151,126,41,222,200,12,173,87,203,131,221,132,232,168,66,30,204,215,43,88,197,65,210,178,171,23,19,225,153,13,236,23,101,111,70,26,92,248,89,129,159,241,18,241,29,198,139,122,164,42,174,87,48,169,51,114,217,107,188,4,83,113,26,66,98,116,105,138,31,111,68,246,156,59,221,152,58,105,151,123,50,247,252,82,107,28,173,32,22,223,102,151,98,63,197,247,250,37,179,253,11,175,215,59,116,228,162,115,219,146,26,151,120,146,105,82,86,168,74,211,160,41,221,241,71,180,129,174,85,180,64,
|
||||
112,64,20,69,84,43,142,192,167,45,157,141,186,247,60,148,37,120,38,88,212,233,10,60,188,191,91,204,237,100,48,210,87,8,100,84,187,208,166,140,109,208,175,241,17,97,230,27,180,219,167,192,168,110,135,122,189,241,238,129,70,86,207,171,108,122,50,143,16,172,245,224,222,221,139,195,140,247,164,237,137,199,132,139,58,146,137,25,27,46,174,13,207,135,91,110,239,124,134,207,243,243,120,248,108,143,48,216,123,17,124,173,170,173,12,12,240,187,174,122,251,73,36,202,107,41,180,176,199,163,66,13,162,228,221,22,53,69,90,124,177,194,219,44,142,122,153,88,230,85,137,100,7,153,220,188,112,200,233,166,12,67,84,217,88,238,14,177,91,200,100,209,240,59,15,164,192,146,97,254,153,236,33,65,112,145,161,133,2,223,28,94,212,141,32,138,23,178,238,252,57,166,214,32,49,212,103,67,90,196,67,166,188,40,59,143,30,71,44,177,22,21,247,251,117,186,50,19,43,25,203,52,57,185,95,239,190,237,201,156,203,91,212,166,34,25,94,120,22,163,202,187,150,48,14,43,
|
||||
23,164,234,40,77,152,47,84,84,34,139,47,14,113,148,216,196,18,168,206,218,152,15,215,129,198,94,61,189,150,238,193,153,151,26,136,59,107,169,175,200,101,65,187,48,143,103,113,48,212,82,109,110,137,180,153,92,158,229,237,80,69,157,248,242,183,51,205,183,45,175,51,30,94,34,16,218,88,144,2,122,68,100,235,1,119,81,171,119,120,117,137,126,29,145,46,177,180,107,207,162,145,107,248,47,231,114,166,161,68,234,47,167,178,17,123,135,115,9,124,221,169,59,154,0,152,107,174,175,226,65,122,33,110,234,189,179,92,163,151,33,126,179,188,116,160,111,80,126,13,212,27,93,144,41,235,132,151,212,141,89,244,62,181,195,205,132,136,87,144,47,157,180,242,150,75,70,174,153,84,101,19,57,116,206,56,158,141,215,85,102,221,104,73,184,16,79,73,67,137,153,218,179,19,181,108,158,57,197,21,124,124,25,128,135,25,206,176,193,191,146,169,194,254,90,243,84,208,4,93,66,147,122,203,129,190,130,70,79,5,110,6,242,209,234,194,75,187,94,192,108,95,120,82,105,92,
|
||||
176,174,232,139,58,76,236,154,29,16,175,111,95,245,229,77,221,230,179,98,82,234,99,169,84,47,35,214,160,133,47,3,87,218,84,195,69,54,53,203,18,80,239,121,102,215,215,184,89,130,202,110,132,146,215,74,213,39,223,93,10,26,203,228,47,24,175,243,212,165,121,244,139,110,8,226,69,25,44,135,171,206,53,148,92,184,238,13,94,84,111,118,216,155,211,137,23,19,233,53,53,9,164,169,178,183,121,76,118,187,172,82,186,118,211,18,8,230,222,99,185,170,171,178,31,234,158,165,110,225,202,141,53,86,122,174,249,124,13,230,236,154,189,139,142,125,94,188,94,188,93,8,101,61,24,158,172,108,89,169,23,67,211,82,54,50,233,117,218,218,139,134,189,226,234,228,224,91,165,152,132,105,229,249,104,115,78,135,35,76,29,185,92,245,30,114,207,230,18,212,197,207,244,76,80,38,209,30,159,11,129,179,137,126,144,201,203,184,209,106,185,106,207,78,190,156,168,169,167,4,14,227,11,228,162,246,58,195,230,142,187,140,54,2,247,207,82,56,117,215,240,65,15,175,54,148,
|
||||
238,193,240,224,227,147,147,75,105,79,62,37,89,158,194,135,120,146,25,117,213,246,116,236,253,188,108,200,53,232,230,61,78,53,117,7,106,24,23,192,148,114,167,98,144,35,121,177,49,146,126,72,93,209,88,190,209,214,94,188,54,81,184,189,6,91,144,158,218,179,126,13,170,191,55,182,34,216,45,170,232,14,106,247,92,14,171,75,154,11,64,181,202,76,118,201,119,223,31,166,71,216,206,203,238,74,247,33,51,165,19,43,62,128,20,56,207,169,201,70,102,117,170,178,118,185,159,87,88,168,236,42,161,83,212,82,103,70,73,54,171,65,236,102,174,158,224,248,29,109,119,54,153,164,82,103,83,165,210,186,251,194,240,216,2,96,182,204,186,181,62,66,68,80,227,81,193,247,144,189,211,239,173,35,82,252,13,202,49,122,220,253,140,182,207,212,170,131,241,192,78,3,248,234,7,171,220,49,237,105,195,209,71,74,182,189,166,198,14,107,99,39,42,134,2,188,159,87,81,58,158,215,210,161,121,99,167,84,108,117,16,91,150,68,189,8,105,153,71,141,34,95,40,39,105,51,
|
||||
247,12,123,56,95,162,84,190,86,149,145,62,167,196,172,231,129,60,55,188,24,247,24,195,46,212,50,199,155,52,78,167,9,12,244,111,124,4,90,179,41,125,117,179,167,224,90,152,126,142,32,216,62,207,15,78,10,26,255,118,220,122,220,36,215,78,11,252,73,233,194,164,29,142,7,88,70,36,2,19,53,41,202,245,229,129,14,115,54,46,156,253,128,244,134,72,215,252,210,134,143,208,173,20,91,141,13,7,149,13,117,189,81,188,222,191,86,163,49,131,235,196,115,27,35,246,112,102,90,94,171,239,12,34,45,239,171,158,78,126,254,126,213,41,95,228,74,24,82,208,195,241,48,236,180,149,136,229,230,210,67,116,179,151,186,206,167,169,210,135,215,149,50,139,93,223,220,145,83,78,152,110,121,72,24,165,46,27,222,199,214,29,73,187,146,149,139,74,93,173,46,103,208,60,142,103,184,238,64,205,73,150,61,222,132,55,229,60,3,191,13,26,1,173,242,236,210,240,119,42,29,23,230,82,63,66,191,210,66,85,216,209,251,9,70,251,208,223,200,149,87,53,65,184,83,194,
|
||||
96,229,33,167,135,141,234,151,79,75,148,48,111,188,168,34,37,83,39,56,144,112,164,183,49,139,64,226,98,166,31,151,240,120,208,182,253,12,27,161,50,120,143,81,253,190,216,137,151,75,179,70,168,192,133,159,174,162,170,103,46,251,180,5,52,61,77,86,16,210,114,68,184,179,124,121,197,43,115,207,76,85,123,176,132,33,95,177,233,26,215,52,60,88,30,113,37,54,198,157,206,240,146,218,88,223,162,13,57,24,169,174,223,73,107,22,235,84,244,216,209,40,208,126,205,50,20,87,9,76,43,45,213,61,231,235,250,80,171,106,32,208,8,143,7,186,23,164,92,45,81,100,193,83,103,189,31,79,116,156,177,156,66,36,174,105,20,108,201,111,41,191,97,88,163,186,218,82,168,238,113,255,207,197,222,236,186,218,251,81,188,184,237,173,81,12,243,222,191,220,24,226,48,22,21,95,115,175,137,220,41,200,49,213,149,29,75,184,227,20,50,134,82,19,220,134,228,36,216,101,197,117,98,98,107,163,102,87,26,80,118,94,245,154,64,255,67,250,107,138,158,92,28,40,59,48,
|
||||
218,48,240,165,20,123,102,244,175,102,40,251,184,53,240,72,233,87,49,237,186,3,55,184,203,5,182,203,50,135,68,95,240,174,246,189,127,7,58,205,56,118,222,79,244,74,181,30,143,116,244,154,95,163,93,176,223,235,200,187,209,189,47,198,102,24,227,59,123,175,68,113,172,186,241,212,118,10,58,233,44,160,144,17,179,132,91,75,58,199,67,232,68,142,20,218,206,168,237,116,85,175,158,20,41,152,174,234,224,112,45,219,153,254,92,45,75,83,237,247,78,231,136,212,112,84,89,109,232,141,146,29,201,159,9,219,106,1,155,85,123,22,154,22,205,68,238,104,15,170,83,11,162,196,251,201,122,207,236,97,219,138,206,49,239,35,3,70,227,44,173,158,124,103,129,102,95,218,156,202,243,29,238,166,23,126,120,157,49,112,32,245,98,246,156,200,152,229,204,188,33,72,200,212,111,170,193,243,151,120,104,131,176,19,233,166,151,136,178,166,155,60,241,232,235,195,33,105,84,222,50,152,234,77,185,103,100,249,177,247,82,188,74,177,77,113,101,16,201,211,203,192,75,78,60,238,
|
||||
189,195,47,38,219,73,14,203,60,226,123,82,105,74,20,95,120,12,204,62,90,71,20,230,200,44,21,42,102,162,172,163,190,192,137,110,139,86,41,145,20,87,167,186,33,129,254,18,197,33,179,231,171,74,27,106,86,52,169,128,168,174,202,201,198,58,166,177,174,191,223,195,213,106,215,64,139,103,44,116,95,41,250,10,228,87,146,52,250,243,198,188,59,85,92,7,155,108,236,64,84,156,29,64,32,105,84,198,105,23,177,213,193,156,233,86,218,229,118,83,44,34,9,67,164,232,251,211,245,234,164,84,133,164,248,53,226,56,110,112,128,206,57,209,154,93,44,195,16,154,118,97,32,19,233,234,250,4,189,29,86,237,3,37,143,236,146,168,192,252,108,141,190,40,108,3,228,69,61,169,239,177,247,166,53,139,197,138,150,111,148,206,222,166,125,48,1,89,157,221,167,184,202,186,122,145,237,2,209,184,230,124,82,124,236,109,81,151,61,109,36,165,188,58,38,242,66,171,109,28,231,179,184,156,68,245,28,239,105,161,197,54,210,39,42,176,33,40,213,209,158,228,80,18,43,81,
|
||||
234,51,153,2,204,174,72,133,153,215,144,231,234,163,108,163,11,171,244,172,90,159,35,23,87,222,68,89,185,141,41,85,246,46,198,74,90,87,83,91,184,160,211,207,238,189,53,45,84,244,188,188,57,105,39,165,151,6,222,65,39,250,121,238,50,141,175,163,224,101,172,253,224,9,238,164,137,163,210,23,60,226,31,95,241,197,251,215,163,31,44,208,85,93,14,57,87,239,105,144,123,69,187,241,189,183,161,251,170,26,207,169,211,188,109,156,86,149,48,193,112,29,161,239,246,109,33,46,26,132,148,202,121,121,42,227,19,73,6,253,91,169,237,242,114,177,214,64,106,78,11,152,135,247,89,96,194,209,46,207,161,96,214,93,131,219,125,14,221,117,117,130,221,64,234,242,247,112,27,173,44,85,150,60,74,157,238,122,14,29,202,167,25,221,171,175,122,56,217,48,187,102,197,41,210,31,34,152,37,135,136,154,19,81,174,228,82,59,195,79,125,36,231,12,15,185,59,137,109,94,105,226,49,178,112,206,244,136,162,186,30,86,113,45,247,60,99,199,29,168,193,225,18,86,222,70,
|
||||
60,40,189,173,153,90,196,212,30,222,248,45,115,79,112,225,213,94,3,244,96,196,160,129,66,214,161,135,92,31,215,176,6,94,40,19,61,163,111,152,239,86,36,235,188,7,14,47,65,156,104,86,188,75,90,250,150,5,123,206,23,127,213,81,222,97,93,133,132,25,84,139,56,186,109,244,182,146,180,72,64,133,237,178,168,34,28,238,17,160,118,27,51,162,53,6,235,154,6,75,214,92,102,247,58,41,207,183,148,204,238,222,19,13,6,140,220,17,89,133,200,165,102,207,117,111,119,163,125,78,119,141,122,89,9,13,103,139,105,180,78,74,47,198,122,29,23,244,122,124,155,157,175,24,116,212,124,9,11,205,9,30,220,40,212,205,198,155,90,174,234,181,188,102,141,198,111,122,25,244,96,223,123,183,103,178,173,188,48,178,115,214,212,40,87,99,54,70,95,174,206,217,180,133,114,45,175,213,54,164,212,163,63,119,206,158,170,161,97,98,88,86,153,219,171,218,180,203,105,22,34,145,111,196,151,192,11,7,200,142,59,58,15,22,224,114,23,244,159,101,93,206,154,169,12,174,
|
||||
136,237,53,139,110,232,18,222,104,48,83,63,153,11,234,89,210,233,244,124,106,145,191,232,102,188,10,12,245,188,46,195,122,14,69,132,121,193,203,117,235,97,171,71,29,137,3,22,163,100,88,159,185,108,56,65,247,126,163,156,147,215,193,15,35,95,208,227,222,218,186,223,174,206,217,30,8,105,103,81,227,157,115,10,103,84,182,130,206,98,18,8,137,231,189,87,91,184,84,85,205,189,224,141,163,140,219,3,72,4,188,199,116,124,65,6,179,121,94,32,85,55,213,62,158,180,72,83,49,104,145,177,39,223,56,94,60,36,154,90,63,122,246,146,169,53,197,199,124,115,205,2,18,17,207,247,83,187,138,160,40,76,202,149,20,134,42,193,148,239,48,170,51,1,194,222,58,241,172,50,161,108,202,246,227,165,131,158,32,114,200,16,88,42,180,248,60,47,27,219,212,235,66,224,160,226,169,47,78,252,155,30,137,41,219,166,103,17,8,72,159,247,162,120,149,252,154,122,229,72,31,216,9,142,21,94,177,230,121,151,13,166,208,174,136,244,210,124,211,244,64,247,246,123,232,212,
|
||||
219,79,194,117,211,229,12,36,122,44,139,156,110,17,40,254,210,128,223,94,45,226,237,139,104,215,226,189,41,253,204,134,132,62,244,163,98,74,234,89,50,58,219,61,211,52,114,75,66,85,196,26,51,62,25,207,62,208,111,72,43,10,150,105,97,128,63,246,80,179,13,190,60,179,161,230,208,114,47,159,164,187,4,18,173,94,123,82,148,234,190,113,46,241,189,71,42,192,192,26,13,52,139,46,94,117,106,22,25,129,68,241,59,114,70,145,68,45,103,174,40,116,216,7,63,12,62,23,182,62,76,23,111,57,131,70,171,94,206,131,130,247,28,19,106,150,169,150,144,96,59,136,200,11,230,68,26,133,249,50,85,57,216,66,49,161,231,68,61,27,124,117,134,118,117,44,249,114,195,84,17,127,80,238,93,95,178,212,243,212,181,132,104,208,86,71,141,161,136,116,113,45,203,138,94,214,227,36,85,22,53,242,211,196,140,165,234,52,97,13,65,171,72,64,26,31,160,125,145,21,174,169,94,6,228,82,238,179,244,234,121,208,203,75,103,103,195,245,124,190,15,158,56,6,79,250,
|
||||
29,220,186,44,29,7,218,212,160,231,82,32,245,106,221,105,212,88,222,195,9,168,99,197,223,39,106,144,181,96,173,57,252,22,122,227,113,203,140,253,113,155,75,125,239,226,245,169,10,33,103,224,205,93,52,175,128,167,166,252,57,120,54,70,147,47,11,161,48,170,26,95,82,83,186,116,183,147,23,115,70,201,154,234,81,105,148,220,4,79,129,44,131,131,11,117,86,117,6,115,23,248,5,71,202,80,251,28,198,53,51,24,37,138,197,193,230,55,79,219,164,196,223,200,48,232,197,81,90,80,230,18,249,222,130,233,167,81,135,117,133,18,71,185,148,17,7,98,168,169,133,119,212,79,251,140,52,37,151,1,114,3,233,54,102,102,132,205,38,99,197,153,151,59,188,246,244,162,103,147,111,33,41,146,85,86,207,100,128,235,94,189,45,57,58,55,171,36,13,115,218,84,85,228,200,169,14,108,44,24,166,93,49,122,69,45,255,222,158,32,168,81,130,227,51,225,147,205,134,35,170,140,30,179,107,22,142,145,129,135,250,84,227,60,170,58,135,201,61,12,15,86,49,37,80,37,
|
||||
178,34,222,34,19,227,251,135,164,227,170,174,248,29,234,18,166,113,22,194,130,197,58,233,70,205,217,13,105,118,123,126,232,161,11,42,214,77,69,255,13,224,180,150,154,121,60,215,210,169,36,244,109,225,87,170,39,203,70,150,90,163,115,188,68,234,218,158,46,219,206,3,200,4,98,90,126,217,215,130,114,226,9,187,208,37,152,83,207,128,195,193,124,21,39,134,140,196,232,249,196,45,136,87,251,70,241,120,201,168,137,21,208,139,50,214,55,147,108,39,91,225,91,157,124,184,2,34,199,177,234,214,119,198,106,167,39,33,50,103,214,161,4,84,81,80,103,124,35,214,178,109,162,117,159,132,243,113,107,128,49,118,245,120,34,173,60,29,59,110,235,89,199,123,134,55,238,82,209,151,156,59,169,215,116,111,100,230,156,43,28,39,213,55,151,156,250,7,187,149,151,144,99,67,149,202,73,229,109,110,231,110,76,40,165,71,1,58,192,248,100,107,54,167,141,151,179,12,123,253,162,93,6,118,34,61,13,57,203,154,34,75,110,74,21,167,186,74,116,54,145,10,38,4,35,96,
|
||||
79,171,227,251,129,161,55,248,157,32,253,222,223,201,41,135,38,74,59,158,103,55,14,250,27,195,196,216,164,125,160,133,231,36,43,213,101,90,38,152,225,146,181,57,17,188,35,203,240,86,142,51,109,112,18,108,75,81,5,102,67,137,68,228,228,145,143,68,142,10,228,53,222,95,96,113,38,180,87,153,13,27,27,42,6,253,137,205,46,57,246,4,86,93,110,85,164,163,42,50,14,23,20,29,236,110,240,26,47,131,31,255,252,95,254,254,63,102,252,223,190,228,110,153,250,100,141,151,178,239,142,151,72,240,82,246,181,247,235,215,22,118,203,215,210,127,69,105,94,118,199,43,211,87,5,126,116,233,254,181,149,75,241,197,195,252,15,232,7,244,213,79,95,233,51,237,190,230,37,156,150,175,38,13,167,174,236,242,175,97,234,243,41,108,143,95,157,34,149,133,243,87,57,127,109,69,184,124,22,15,167,244,171,233,251,250,56,156,245,211,31,95,242,242,53,173,221,252,213,119,95,109,63,47,224,71,146,78,221,87,63,164,83,184,28,103,205,251,188,164,237,87,216,37,95,97,
|
||||
211,244,219,124,216,150,128,157,155,126,248,10,135,161,41,227,240,112,98,254,10,227,184,159,146,227,26,112,198,82,128,141,194,37,5,75,2,3,187,36,156,146,249,143,175,91,63,165,253,51,157,254,246,203,182,24,108,247,21,133,115,250,151,197,155,112,237,226,226,171,92,14,163,146,50,203,210,41,5,33,1,54,39,95,125,6,92,136,139,114,73,227,101,61,124,41,235,244,139,179,110,192,145,238,203,253,196,37,235,87,176,221,97,210,223,190,182,20,236,62,245,93,222,236,32,158,77,9,204,6,150,129,88,196,69,26,14,199,133,192,130,118,88,151,116,154,191,215,250,31,255,94,44,203,48,255,248,215,31,240,15,120,219,182,31,127,76,225,60,68,233,4,212,103,249,227,143,126,202,127,192,255,254,101,253,122,237,203,40,255,126,4,56,252,170,65,126,14,227,143,60,252,53,9,97,11,182,63,98,127,228,38,237,135,38,253,227,103,190,255,76,79,215,31,190,2,27,203,110,73,187,36,77,190,243,255,253,218,113,14,72,213,79,239,134,117,26,250,57,253,36,110,235,167,26,228,
|
||||
54,109,154,111,100,252,10,116,249,6,43,124,64,242,199,23,191,78,71,244,154,159,224,249,74,219,40,77,142,29,14,191,203,38,157,142,32,223,202,120,234,231,62,91,190,124,16,228,35,13,63,109,203,214,6,92,57,175,195,208,79,203,252,189,38,134,124,192,192,163,244,31,95,122,247,117,209,92,248,90,118,235,235,147,242,56,28,194,168,108,202,101,63,252,154,203,182,108,194,233,43,89,211,195,163,117,14,243,244,72,225,255,130,174,8,164,172,249,139,81,127,124,25,32,144,0,21,32,50,101,252,51,103,32,168,21,72,251,252,21,79,41,64,86,114,88,222,119,233,175,53,226,176,59,98,6,46,43,129,205,45,128,217,39,140,33,88,162,0,110,30,238,247,235,2,254,62,14,2,88,253,196,237,31,191,234,46,233,187,31,255,21,192,172,235,183,239,122,1,14,252,14,146,252,85,132,96,151,238,88,49,125,13,77,88,118,159,20,124,82,255,51,219,223,86,46,83,216,205,31,228,127,215,238,7,225,32,175,192,146,35,141,237,113,202,207,213,129,211,0,119,159,164,69,13,40,
|
||||
131,253,215,21,223,136,252,133,19,189,251,4,237,8,111,84,230,249,81,82,97,242,4,44,241,51,154,127,226,232,123,225,111,171,62,53,12,216,1,172,8,2,248,51,118,127,124,137,0,73,159,218,60,80,9,54,105,1,40,167,121,0,199,202,103,250,183,227,226,184,7,212,84,70,235,242,29,191,227,100,96,244,58,29,57,61,18,15,12,254,206,240,55,6,67,176,87,51,247,191,147,2,188,248,134,249,87,54,245,237,95,234,55,94,155,163,100,127,90,89,132,201,87,222,31,177,72,75,128,193,173,251,42,19,144,186,99,199,178,5,214,130,66,5,78,253,14,193,95,92,249,107,189,28,198,101,97,188,124,156,58,124,255,190,116,62,252,253,144,235,243,151,157,229,79,51,67,176,107,159,252,90,11,68,239,200,55,128,94,158,254,113,7,32,56,64,148,77,105,122,160,126,89,147,111,143,227,34,236,242,244,27,223,71,54,197,195,177,118,255,88,13,192,144,78,101,218,29,134,253,132,3,72,18,56,23,160,251,111,0,143,113,184,206,159,67,63,249,237,64,218,111,154,200,14,76,
|
||||
77,159,50,58,22,239,227,24,128,247,224,173,15,85,71,115,63,69,223,230,130,109,63,213,178,236,32,174,135,73,223,215,23,0,170,199,110,127,178,232,55,37,28,103,128,66,6,222,39,107,216,124,165,77,218,30,25,56,216,101,10,143,10,250,112,65,26,2,150,253,20,199,31,0,67,192,244,223,161,56,252,0,44,189,31,241,4,133,127,52,164,131,129,178,117,250,148,210,79,188,183,0,56,191,18,244,43,118,128,60,186,166,7,185,253,205,239,45,128,194,114,196,243,179,2,8,237,55,46,14,160,127,115,237,95,168,22,32,164,4,88,75,135,225,39,211,30,175,254,19,96,159,45,141,126,252,211,175,181,127,252,83,218,253,248,151,117,254,241,71,177,180,205,191,3,2,140,102,208,16,254,254,187,146,143,38,247,233,158,221,209,105,64,15,40,202,188,0,22,76,41,48,167,253,77,176,191,109,61,16,13,226,58,165,31,206,153,127,225,229,232,135,7,14,66,0,224,79,72,91,208,189,190,134,190,41,231,226,88,225,0,92,7,86,62,78,138,214,178,73,126,71,195,62,90,208,
|
||||
252,29,111,80,174,32,117,255,253,119,132,14,98,58,118,255,31,255,190,244,67,25,127,123,15,176,255,3,6,205,244,7,124,73,151,227,124,251,104,234,233,111,87,255,253,235,227,33,224,37,176,224,225,209,79,14,2,166,167,195,81,114,159,127,15,56,44,191,42,241,131,168,131,12,15,190,248,197,80,224,138,95,242,225,3,129,239,44,253,241,117,57,64,214,172,113,253,255,252,148,39,110,7,232,96,154,143,154,63,234,0,160,103,254,71,149,114,196,56,252,77,85,95,115,252,93,3,63,79,62,196,201,113,214,119,13,253,110,3,229,148,126,4,207,39,118,63,254,235,252,87,41,242,149,3,127,142,223,255,90,81,255,72,98,0,220,201,31,191,3,249,173,123,62,140,9,220,203,210,249,40,29,128,246,163,143,109,135,121,63,69,202,1,253,191,129,43,0,244,126,153,240,171,27,126,183,212,35,181,191,2,225,167,31,207,62,187,130,80,118,233,246,139,205,190,101,195,177,239,119,55,4,221,236,123,145,111,6,155,235,178,105,190,43,47,154,62,46,129,204,23,127,146,218,97,102,
|
||||
6,82,144,30,21,250,11,39,126,177,255,111,220,61,26,104,255,103,9,254,247,47,177,4,221,226,35,129,154,230,111,255,43,167,244,209,242,129,4,112,123,2,113,136,1,99,131,30,215,252,50,237,227,192,6,126,61,186,100,151,166,71,21,252,18,152,191,42,251,136,210,244,209,82,203,65,8,241,65,41,31,77,122,92,246,39,231,128,205,14,55,190,253,255,7,2,250,92,219,166,97,183,21,160,111,126,19,217,159,109,238,231,197,253,47,107,126,133,242,47,153,250,102,176,63,77,200,167,126,29,142,24,79,223,153,89,182,254,79,207,62,44,251,115,173,195,235,253,35,7,64,155,111,146,239,62,254,227,95,190,62,48,6,144,251,180,181,190,249,71,201,250,223,230,21,112,32,200,208,69,118,190,126,252,151,47,219,211,254,249,147,195,255,51,53,77,105,2,244,29,40,219,95,178,228,7,12,188,249,247,95,157,22,244,204,14,244,231,143,75,223,2,229,239,95,255,205,250,190,230,159,127,231,255,119,16,63,205,253,83,169,223,104,43,191,59,2,32,241,21,8,88,208,194,180,254,
|
||||
227,236,183,202,233,15,165,254,11,249,191,132,230,39,205,63,179,28,46,64,224,206,159,112,255,5,95,63,195,124,104,221,79,250,14,71,55,16,203,244,39,134,143,44,254,46,129,240,83,67,159,229,62,146,229,23,165,30,91,29,253,247,19,239,111,155,14,164,28,224,248,44,248,209,63,67,120,180,252,163,173,128,188,129,226,78,255,119,82,28,112,242,218,253,76,201,183,138,73,15,53,253,199,23,55,255,180,17,244,221,116,58,192,125,180,145,99,12,8,65,101,52,235,231,130,236,155,106,62,161,0,44,222,254,69,93,255,166,191,45,252,104,243,111,198,8,255,113,156,250,79,21,7,78,251,185,67,180,230,159,221,19,96,236,243,211,1,14,236,76,253,48,149,7,189,14,71,140,63,173,226,39,224,128,31,160,174,14,165,20,30,162,25,80,117,247,93,59,71,168,147,176,252,255,38,157,107,120,80,232,254,147,215,202,163,99,126,112,243,113,235,16,25,89,26,126,164,211,63,116,184,191,114,103,9,66,94,78,63,135,158,225,91,58,63,203,249,24,161,254,175,250,108,62,247,241,
|
||||
159,141,246,248,11,67,80,226,63,55,90,208,37,114,128,77,123,61,90,255,193,67,60,0,204,223,63,173,233,87,212,255,162,180,192,152,50,151,71,95,61,216,226,131,178,143,63,32,187,51,56,229,32,139,143,130,255,36,184,60,128,244,107,126,251,207,44,41,254,69,122,140,64,207,252,150,238,243,223,62,85,13,20,205,65,198,207,50,252,120,219,103,224,120,9,216,225,255,236,54,8,221,218,206,199,64,247,249,237,239,63,165,213,103,185,15,127,44,191,230,230,95,67,249,159,180,183,130,108,56,199,36,12,230,59,0,236,240,151,127,63,217,246,87,54,135,163,84,231,35,167,251,223,190,49,243,189,232,148,14,33,40,57,0,178,63,126,182,220,243,113,15,244,239,26,0,11,150,203,7,222,243,111,52,131,152,13,7,124,127,78,2,224,215,50,110,62,144,13,147,4,96,99,254,22,53,63,249,3,44,15,94,3,32,250,116,212,255,215,149,127,129,233,104,222,5,224,228,163,103,175,127,182,253,242,79,253,242,189,242,161,99,127,170,186,67,243,255,249,142,3,56,229,83,62,96,
|
||||
184,56,70,209,143,198,251,121,254,209,163,62,90,20,148,30,56,116,40,228,238,167,142,254,41,28,154,48,250,149,231,191,140,170,233,175,105,236,144,243,160,135,254,28,68,255,161,207,127,180,220,244,201,244,207,62,2,244,54,24,240,202,239,18,41,194,103,250,25,246,0,233,172,0,134,243,95,21,207,239,244,132,128,98,198,245,208,104,253,247,155,32,255,63,17,244,203,151,159,57,61,129,2,40,15,134,30,138,253,87,133,180,160,45,204,255,250,253,87,131,82,200,191,149,40,137,252,155,142,252,219,127,252,199,127,224,216,191,253,227,59,16,67,249,10,163,112,255,241,7,240,246,7,12,202,17,254,21,185,31,255,2,128,87,130,201,231,199,191,52,97,59,128,159,101,52,133,211,254,227,95,88,4,101,72,250,176,233,179,208,191,194,191,86,57,22,1,107,252,95,47,1,131,150,229,148,203,129,178,195,232,127,254,251,223,255,39,114,169,219,192,
|
||||
|
||||
|
|
|
|||
|
|
@ -1,11 +1,21 @@
|
|||
topic "U++ development cycle guide";
|
||||
[a83;*R6 $$1,3#31310162474203024125188417583966:caption]
|
||||
[b83;*4 $$2,3#07864147445237544204411237157677:title]
|
||||
[H4;b83;t300;*4 $$2,3#07864147445237544204411237157677:title]
|
||||
[b42;a42;ph2 $$3,3#45413000475342174754091244180557:text]
|
||||
[ $$0,0#00000000000000000000000000000000:Default]
|
||||
[{_}%EN-US
|
||||
[s1; U`+`+ usage and development cycle guide&]
|
||||
[s2; Forum&]
|
||||
[s2; Table of contents&]
|
||||
[s0; &]
|
||||
[s0; [^topic`:`/`/uppweb`/www`/community`_en`-us`#1^2 1. Forum]&]
|
||||
[s0; [^topic`:`/`/uppweb`/www`/community`_en`-us`#2^2 2. Reporting
|
||||
bugs]&]
|
||||
[s0; [^topic`:`/`/uppweb`/www`/community`_en`-us`#3^2 3. GIT]&]
|
||||
[s0; [^topic`:`/`/uppweb`/www`/community`_en`-us`#4^2 4. Issue tracking]&]
|
||||
[s0; [^topic`:`/`/uppweb`/www`/community`_en`-us`#5^2 5. Something
|
||||
about coding standards]&]
|
||||
[s0; &]
|
||||
[s2;:1: 1. Forum&]
|
||||
[s3; After you have installed U`+`+ and tried some examples, you
|
||||
might have came to conclusion that you are going to give it a
|
||||
try. Now first thing that you should do at this moment is to
|
||||
|
|
@ -21,7 +31,7 @@ corner`".&]
|
|||
in U`+`+ development, please provide an information about your
|
||||
real name (so that you can be later added to contributors lists
|
||||
without further asking etc...).&]
|
||||
[s2; Reporting bugs&]
|
||||
[s2;:2: 2. Reporting bugs&]
|
||||
[s3; If you do think that you have found a problem with U`+`+ library,
|
||||
you should report it in the forum. In order to make dealing with
|
||||
the issue as efficient as possible please, following steps would
|
||||
|
|
@ -46,7 +56,7 @@ issue can take weeks. If problem cannot be fixed immediately,
|
|||
it is usually moved to redmine issue tracking system. You can
|
||||
check the what issues are currently open [^http`:`/`/www`.ultimatepp`.org`/redmine`/projects`/upp`/issues^ h
|
||||
ere].&]
|
||||
[s2; GIT&]
|
||||
[s2;:3: 3. GIT&]
|
||||
[s3; U`+`+ currently uses git as their main version control tool.
|
||||
Main git repository are located under [^https`:`/`/github`.com`/ultimatepp`/ultimatepp^ h
|
||||
ttps://github.com/ultimatepp/ultimatepp]. You could learn more
|
||||
|
|
@ -77,11 +87,12 @@ U`+`+ releases.]
|
|||
::= [s3;b0;a0; Special packages to test the autotest system.]
|
||||
::^ [s3;b0;a0; [* rainbow]]
|
||||
::= [s3;b0;a0; Testing area for developing new GUI backends.]}}&]
|
||||
[s2; Redmine&]
|
||||
[s0; &]
|
||||
[s2;:4: 4. Issue tracking&]
|
||||
[s3; All longer term U`+`+ issues should be tracked. We are using
|
||||
Redmine issue tracking system for this, which is [^http`:`/`/www`.ultimatepp`.org`/redmine`/projects`/upp`/issues^ h
|
||||
[* Redmine] issue tracking system for this, which is [^http`:`/`/www`.ultimatepp`.org`/redmine`/projects`/upp`/issues^ h
|
||||
ere].&]
|
||||
[s2; Something about coding standards&]
|
||||
[s2;:5: 5. Something about coding standards&]
|
||||
[s3; General, I believe that there will be a little problems with
|
||||
coding standard, as the reason that made you use U`+`+ was probably
|
||||
its way of doing things in the first place. However, to recapitulate:&]
|
||||
|
|
@ -100,10 +111,11 @@ characters&]
|
|||
second line of long if condition&]
|
||||
[s3;l160;i150;O2; There are no recommendation about C`+`+ formatting,
|
||||
put spaces and place `{ as you please&]
|
||||
[s3;l160;i150;O2; All C`+`+03 core language features are allowed,
|
||||
of course library wise U`+`+ has preference over standard library&]
|
||||
[s3;l160;i150;O2; For now, U`+`+ library code should be C`+`+11 compatible,
|
||||
but C`+`+11 should not be required. Parts intended to support
|
||||
C`+`+11 features should be conditionally included using #ifdef
|
||||
CPP`_11&]
|
||||
[s3;l160;i150;O2; All C`+`+14 core language features are allowed
|
||||
and it is minimal standard to compile U`+`+&]
|
||||
[s3;l160;i150;O2; For now, U`+`+ library code is C`+`+20 compatible,
|
||||
but C`+`+20 is not required. Parts intended to support C`+`+20
|
||||
features should be conditionally included using #ifdef CPP`_20&]
|
||||
[s3;l160;i150;O2; Prefer U`+`+ features over equivalents in the standard
|
||||
library for example use Upp`::Index instead of std`::set&]
|
||||
[s0;2 ]]
|
||||
|
|
@ -1,13 +1,14 @@
|
|||
TITLE("U++ development cycle guide")
|
||||
COMPRESSED
|
||||
120,156,173,88,127,111,219,56,18,253,42,68,187,123,77,186,142,98,249,71,146,58,56,224,122,237,109,183,127,108,183,104,27,44,22,129,91,81,18,109,243,66,137,90,82,138,234,45,250,221,239,205,80,146,157,196,221,59,220,93,129,182,182,69,114,102,222,188,121,51,212,181,188,152,94,62,125,119,38,190,251,46,30,77,31,79,227,105,60,142,207,38,179,243,217,100,60,29,79,102,241,100,30,95,92,204,226,243,249,197,244,217,217,217,34,147,85,173,109,185,188,78,105,223,12,219,38,216,54,62,191,56,155,197,216,52,155,79,166,231,243,25,54,207,102,113,140,207,241,252,252,236,252,124,81,235,218,40,108,154,77,46,37,254,86,155,9,118,78,177,115,54,159,197,211,241,120,60,59,159,79,103,147,248,28,255,207,198,207,226,9,182,95,140,231,115,236,84,159,235,229,53,86,143,71,227,199,227,127,243,103,241,82,173,100,99,176,225,203,167,175,223,255,227,205,201,213,123,113,237,227,75,113,149,252,144,252,32,26,47,215,74,200,50,23,185,186,85,198,86,133,42,107,145,109,51,
|
||||
163,196,186,209,185,250,203,242,218,79,46,197,143,214,53,5,125,158,94,138,231,171,90,57,177,181,141,216,200,91,37,116,233,107,105,140,202,187,35,233,176,218,105,124,247,182,80,66,125,150,69,101,148,31,241,142,66,175,55,117,216,151,73,60,173,173,200,108,153,153,198,3,66,81,111,100,205,203,164,131,121,171,203,53,45,88,107,178,82,11,137,99,183,145,120,99,91,177,210,206,215,88,206,43,250,77,126,99,27,131,64,172,144,252,204,139,194,114,56,248,132,99,156,90,107,79,158,107,50,164,196,245,199,77,93,87,201,34,57,77,78,219,182,77,34,160,164,11,89,171,170,74,34,235,214,201,233,138,130,246,31,67,240,203,145,104,55,10,126,145,169,86,27,35,82,0,151,26,142,161,178,112,231,247,70,121,98,194,72,84,206,226,23,132,184,145,229,154,66,119,170,178,174,22,105,179,246,66,213,89,36,126,85,194,215,206,150,107,179,197,195,204,22,112,52,167,147,26,108,35,239,216,54,253,43,128,45,255,66,139,154,82,103,178,179,97,148,196,90,68,91,218,154,144,25,252,
|
||||
80,133,212,198,195,55,219,212,93,78,86,74,214,141,83,94,228,26,214,106,195,139,101,83,111,172,243,145,248,128,211,177,167,132,39,210,35,13,100,149,241,35,224,8,93,189,10,89,241,55,221,169,248,230,40,74,132,95,244,120,178,199,35,254,152,107,159,53,158,83,202,72,173,85,205,81,186,28,172,160,211,87,13,185,35,188,146,46,219,40,184,240,220,120,14,68,5,131,221,63,4,55,124,72,30,189,81,109,170,9,2,87,42,151,60,138,58,38,190,46,8,86,137,20,211,214,133,120,29,252,92,41,101,132,209,55,234,33,151,82,226,235,173,53,183,112,4,126,7,116,246,168,63,224,138,224,110,65,127,176,25,235,224,114,193,176,239,135,15,176,140,40,137,196,71,240,125,96,97,134,29,176,98,36,81,77,230,20,113,32,57,106,34,109,106,0,14,215,124,237,129,12,224,199,97,171,198,81,164,132,46,57,73,244,136,162,227,168,43,188,119,204,28,122,64,228,233,227,14,113,230,150,75,224,102,103,156,11,107,101,27,112,73,14,249,33,67,93,164,70,167,78,186,237,104,191,
|
||||
94,58,110,162,192,246,19,25,137,215,165,160,132,57,114,191,144,0,51,71,192,228,8,159,71,11,181,247,13,16,2,165,87,43,157,105,42,53,124,1,7,189,166,186,8,72,142,112,158,49,182,165,157,40,191,10,129,179,89,96,180,129,24,128,138,178,170,64,14,13,192,242,69,8,208,196,103,227,75,29,207,199,151,191,0,130,247,21,158,174,182,108,242,86,57,166,149,93,117,17,29,73,48,103,95,91,90,162,3,92,166,138,240,183,136,200,53,64,8,156,163,140,160,58,74,90,5,171,105,163,13,167,102,165,129,22,37,2,229,205,137,216,133,214,34,28,105,144,232,124,139,101,159,85,126,252,103,254,49,43,54,84,129,21,108,17,103,196,209,47,239,89,15,53,242,221,185,62,162,66,174,180,161,140,227,73,135,22,80,160,10,32,197,12,170,22,136,246,211,175,199,209,33,147,111,201,138,20,215,167,130,98,202,0,243,50,144,160,99,31,128,215,56,179,179,148,163,196,187,101,125,210,211,160,50,133,46,33,121,6,118,27,151,81,125,129,241,78,253,222,64,37,242,160,153,32,
|
||||
81,222,100,97,117,71,168,72,92,249,6,170,4,26,129,52,53,168,1,148,4,199,139,180,84,50,187,65,79,9,97,66,114,60,78,2,140,209,31,186,234,3,174,195,79,178,174,101,182,9,10,125,151,121,196,52,58,158,126,227,10,219,157,219,7,128,158,3,210,50,21,25,119,90,214,83,13,199,167,91,145,60,73,62,37,79,216,230,14,86,6,169,96,151,41,39,124,56,68,21,210,61,10,138,145,60,41,16,252,77,242,9,229,54,153,39,79,130,58,222,23,70,236,163,211,80,213,183,112,159,8,137,31,123,21,0,40,185,133,1,210,101,50,144,156,100,70,250,77,112,214,6,138,117,233,240,7,179,251,82,249,12,98,129,210,2,3,183,160,84,123,55,23,67,105,223,105,200,4,44,51,135,148,162,171,234,65,206,12,20,184,129,154,235,208,115,177,63,67,106,224,106,36,222,43,167,45,158,113,115,34,177,108,66,118,3,227,41,53,185,220,162,135,65,188,2,144,56,3,26,70,219,125,183,53,84,11,113,143,216,32,90,165,110,160,233,80,169,94,130,240,136,208,64,72,221,
|
||||
161,232,119,57,85,124,71,34,160,215,91,45,236,109,207,189,28,32,247,165,88,59,228,159,53,100,11,254,128,36,191,117,90,139,254,145,221,48,83,90,6,159,86,135,56,178,198,57,100,7,103,218,74,149,255,65,191,239,44,38,167,112,251,159,104,147,62,57,109,240,240,52,156,249,81,80,63,90,246,194,252,234,245,135,14,254,32,68,59,107,104,225,30,67,11,139,33,252,210,46,52,215,94,186,184,21,88,244,116,107,77,36,126,166,71,180,152,18,230,53,250,195,150,157,55,54,35,65,4,57,73,130,131,239,62,56,143,213,155,38,77,34,20,24,28,220,5,177,247,25,190,210,250,197,105,183,152,214,238,61,222,251,184,236,144,228,162,2,87,92,137,12,56,117,119,122,112,96,113,107,221,205,157,33,145,233,76,158,175,156,45,246,68,62,183,89,67,11,66,195,188,254,88,219,74,103,193,115,160,217,170,52,192,127,10,0,223,13,49,39,159,84,153,156,52,0,25,223,59,144,1,45,213,30,214,49,102,0,202,239,247,18,64,112,18,198,25,139,105,211,139,163,224,108,137,210,
|
||||
242,199,220,72,198,151,19,129,255,197,151,47,241,179,103,243,197,197,120,60,255,40,232,220,116,124,41,199,151,226,250,169,128,71,222,101,203,229,98,241,215,253,39,31,168,200,7,163,201,35,16,205,210,232,101,146,71,119,59,105,47,75,168,15,105,82,165,121,18,225,145,173,127,64,218,21,52,131,186,15,165,86,125,166,210,12,36,15,135,57,197,85,234,135,193,149,235,20,99,5,36,14,219,87,70,182,199,17,124,188,239,189,83,43,80,178,204,212,131,0,222,245,79,134,249,155,133,204,239,190,179,43,133,146,161,105,247,166,146,71,119,211,7,29,237,54,96,234,10,176,96,152,243,187,24,116,249,32,138,67,158,246,86,31,56,250,82,21,22,23,8,23,204,237,59,251,223,154,170,105,200,210,210,60,48,245,2,13,73,150,251,102,130,160,119,235,255,39,163,224,81,237,235,7,38,127,150,37,84,141,229,254,224,54,140,224,150,30,62,216,248,28,15,10,22,128,111,238,77,145,222,77,33,221,205,67,80,255,222,63,10,77,42,87,223,180,125,192,52,143,51,114,143,192,52,76,
|
||||
41,190,110,169,193,225,94,134,15,145,18,53,147,218,246,97,77,169,174,63,161,153,50,240,157,152,208,111,165,106,197,171,171,215,34,133,77,92,132,16,239,215,175,195,0,204,162,220,183,58,84,150,193,181,137,123,40,6,142,144,153,78,244,247,102,27,234,22,52,247,224,158,21,90,26,89,121,247,103,29,101,104,238,116,207,211,217,134,122,210,255,185,101,188,191,55,221,33,51,97,42,198,140,34,93,222,79,247,175,20,46,57,210,140,4,240,80,70,3,165,253,251,208,112,245,132,4,213,181,25,166,178,112,161,184,127,230,168,107,66,253,4,211,205,63,121,184,26,209,101,51,32,72,147,46,29,36,105,20,165,201,136,6,15,232,65,30,46,78,228,180,31,166,52,190,124,99,198,205,84,36,126,194,184,133,206,54,10,29,59,147,149,174,27,154,180,15,78,242,87,156,134,235,167,127,155,35,249,24,73,48,181,106,154,29,83,13,10,216,228,164,180,226,8,70,209,140,92,184,6,147,68,241,84,79,51,237,231,76,241,155,150,195,35,113,63,15,172,3,122,52,81,223,90,157,7,
|
||||
107,224,215,114,184,239,141,194,164,198,23,167,86,67,34,83,181,178,3,73,116,125,232,244,87,253,169,152,107,49,204,249,29,219,248,202,149,135,151,44,212,50,160,101,13,181,36,145,156,116,227,160,191,51,82,243,85,74,163,217,49,128,187,29,164,75,253,213,233,224,200,127,231,190,223,191,97,192,5,19,78,159,6,215,253,70,146,145,163,161,45,16,146,37,68,228,88,248,130,198,229,10,217,68,217,120,174,11,118,156,186,186,162,32,220,206,185,225,2,71,239,8,24,67,100,162,16,139,131,151,159,43,74,148,76,125,55,85,242,157,57,197,240,114,131,24,115,180,17,148,19,61,214,127,240,77,126,70,175,68,80,119,228,196,183,78,243,16,158,78,154,209,116,147,147,123,167,169,104,29,145,177,240,3,70,80,32,136,201,133,234,26,212,33,109,160,215,21,244,163,38,76,15,89,249,192,196,34,93,40,237,238,237,203,254,5,255,69,152,123,248,218,79,162,133,57,154,166,223,224,25,223,98,56,121,201,23,42,47,170,164,48,102,31,50,70,138,197,199,141,167,244,254,130,222,12,
|
||||
148,235,134,110,50,195,75,25,242,68,134,139,203,72,236,248,223,143,24,173,30,202,116,195,101,58,164,23,163,178,27,74,189,95,127,200,137,31,25,204,118,116,111,120,225,251,222,78,53,217,205,56,230,155,27,208,0,5,194,212,223,255,222,173,236,38,249,158,212,145,120,11,110,145,58,212,64,49,144,220,67,4,105,162,232,119,14,161,238,140,13,25,226,90,213,244,14,144,54,7,38,63,214,43,148,148,120,241,246,109,242,41,142,251,89,110,185,252,23,13,34,114,152,
|
||||
120,156,173,88,127,111,219,56,18,253,42,68,187,119,77,186,142,98,217,114,146,58,56,224,122,237,110,155,63,182,91,180,13,22,135,192,169,40,137,182,121,145,68,45,73,217,241,22,253,238,247,134,164,100,39,118,239,22,189,43,208,54,145,200,249,249,230,205,140,110,248,197,248,242,249,135,51,246,195,15,241,96,252,116,28,143,227,97,124,54,74,206,147,209,112,60,28,37,241,104,18,95,92,36,241,249,228,98,252,226,236,108,154,243,198,74,85,207,110,222,38,151,25,174,218,241,112,120,249,60,193,245,17,174,15,207,47,206,146,24,151,147,201,104,124,62,73,32,36,73,226,24,63,199,147,243,179,243,243,169,149,182,20,179,155,44,25,93,114,252,109,150,35,220,28,227,102,50,73,98,136,26,38,231,147,113,50,138,207,241,127,50,124,17,143,112,253,98,56,153,224,166,184,183,179,27,156,30,14,134,79,135,255,229,207,244,181,152,243,182,196,133,47,159,191,254,229,167,119,39,215,31,217,141,137,47,217,117,250,99,250,35,107,13,95,8,198,235,130,21,98,37,74,213,84,162,
|
||||
182,44,223,228,165,96,139,86,22,226,175,179,27,51,186,100,159,120,134,39,106,206,114,85,91,28,49,244,124,120,201,194,127,55,183,86,53,50,79,167,233,105,122,218,54,205,90,100,233,233,122,189,78,79,115,85,85,109,45,237,38,253,44,234,244,164,53,233,211,248,118,196,226,136,253,172,116,91,205,190,71,192,8,2,70,17,251,32,26,165,173,172,23,44,107,23,230,187,36,141,33,105,28,177,55,87,159,190,235,122,130,235,73,196,174,140,105,5,179,154,231,119,176,230,187,36,77,32,105,18,177,143,170,18,118,73,46,241,76,181,72,132,42,232,23,99,145,33,174,139,222,73,159,149,105,60,237,3,73,79,198,151,236,229,220,10,205,54,170,101,75,190,18,76,214,184,90,150,162,8,233,166,68,91,45,241,187,129,38,38,238,121,213,148,194,12,220,141,74,46,150,214,223,203,57,222,90,69,217,206,203,214,0,230,204,46,185,117,199,184,6,52,20,153,133,3,11,73,90,44,227,16,187,137,216,59,181,102,115,169,141,101,222,139,254,146,89,170,182,4,200,20,227,238,157,97,
|
||||
149,114,80,195,79,16,163,197,66,26,178,92,146,34,129,216,45,173,109,124,232,40,100,17,16,44,43,110,69,211,164,145,210,139,244,116,78,78,155,219,128,162,1,91,47,5,236,34,85,107,89,150,44,3,168,9,177,144,221,40,152,243,123,43,12,85,235,128,53,90,225,9,92,92,242,122,65,174,107,7,35,135,33,38,108,30,177,223,4,2,174,85,189,40,55,120,73,201,18,20,54,133,98,17,206,58,167,155,254,101,136,173,123,18,50,154,243,160,163,20,28,103,225,109,173,44,69,166,183,67,84,92,150,38,100,215,231,100,46,184,109,181,48,172,144,208,102,75,119,152,183,118,169,180,137,216,39,72,199,157,26,150,112,131,52,144,86,23,63,10,28,69,87,206,125,86,204,93,144,138,223,52,121,9,247,171,46,158,206,226,129,251,177,144,38,111,141,75,169,139,212,66,88,231,165,46,128,10,146,62,111,201,28,102,4,215,249,82,192,132,151,165,113,142,8,175,48,252,67,225,134,13,233,147,119,98,157,73,10,129,174,133,78,159,68,1,137,87,21,133,149,35,197,116,117,202,
|
||||
174,188,157,115,33,74,86,202,59,177,143,165,140,240,186,82,229,10,134,192,110,31,157,29,90,234,227,10,231,86,160,38,160,25,231,96,114,229,194,190,235,62,130,85,178,154,64,124,4,219,123,20,230,184,1,45,37,39,168,241,130,60,246,32,71,77,100,173,69,192,97,154,177,6,145,65,248,33,108,222,106,242,148,162,75,70,18,60,162,232,56,10,229,55,154,238,211,80,231,189,247,182,80,174,16,238,182,38,184,242,154,171,22,136,226,125,150,72,93,240,183,148,153,230,122,51,216,173,154,128,80,148,217,110,58,193,59,53,163,180,105,114,162,226,8,105,1,183,201,16,39,143,14,74,199,76,28,192,158,207,101,46,169,224,240,11,144,104,36,85,135,143,231,0,242,202,82,173,61,211,136,6,238,59,181,136,212,18,148,0,64,242,166,1,68,36,194,86,76,189,131,101,124,54,188,148,241,100,120,249,43,186,195,199,6,111,231,27,167,114,37,180,3,23,122,133,247,232,136,3,63,187,12,179,38,80,192,100,170,11,179,130,71,186,69,132,128,60,202,11,106,164,166,83,208,154,
|
||||
181,178,116,9,154,75,68,139,210,129,34,119,233,216,186,182,134,59,188,68,186,139,13,142,221,139,226,248,63,217,231,176,177,164,58,108,160,139,144,195,142,126,253,232,88,81,34,235,193,244,1,149,115,35,75,202,59,222,132,104,33,10,84,7,230,17,67,191,253,237,56,58,164,242,61,105,225,236,230,148,145,79,57,194,60,243,32,8,24,68,224,37,100,6,77,5,10,61,28,235,146,158,121,174,169,100,13,226,43,161,183,213,57,85,25,112,175,197,239,45,184,162,240,204,9,16,21,109,238,79,7,64,69,236,218,180,224,38,192,8,160,177,128,6,162,196,156,191,72,75,131,62,133,174,239,221,4,241,24,72,66,24,163,63,100,211,57,108,253,35,110,45,207,151,158,167,31,34,143,144,70,226,233,153,171,179,173,220,206,1,116,30,128,214,65,209,197,157,142,117,80,131,248,108,195,210,103,233,231,244,153,211,185,13,171,11,82,229,76,166,156,56,225,160,86,16,248,192,243,70,250,172,130,243,119,233,103,148,219,104,146,62,243,28,249,152,30,113,143,164,161,182,87,48,159,0,
|
||||
137,135,29,23,32,40,133,130,2,98,103,82,144,158,228,37,55,75,111,172,242,16,11,233,48,7,179,251,90,152,28,148,129,210,2,2,55,128,212,250,97,46,250,210,126,208,150,41,176,14,57,196,20,161,170,123,82,43,193,195,45,56,93,250,206,139,251,57,82,3,83,49,21,8,45,21,222,185,22,69,148,217,250,236,122,196,83,106,10,190,65,39,3,133,249,64,66,6,152,140,174,155,112,213,87,11,97,143,208,192,214,66,220,129,217,193,82,29,5,225,21,69,3,46,5,161,232,122,5,85,124,0,17,162,215,105,173,212,170,195,94,129,32,119,165,216,205,63,204,108,128,31,128,228,159,129,113,209,69,242,59,135,148,181,11,62,157,246,126,228,173,214,200,14,100,170,70,212,127,162,235,7,141,233,41,204,254,23,154,165,113,147,85,122,234,101,222,50,234,74,179,142,158,199,211,48,219,133,36,120,58,218,234,68,59,55,24,96,28,37,194,58,169,125,163,237,8,204,181,5,133,254,174,84,25,177,95,232,21,29,166,180,25,137,94,177,113,46,148,42,39,90,4,68,137,136,
|
||||
189,7,198,187,128,211,203,54,75,35,148,25,204,220,186,178,243,51,44,166,243,211,211,112,152,206,238,188,222,249,113,22,226,233,74,11,136,209,53,242,160,197,195,73,66,3,203,107,165,239,30,12,243,14,212,100,249,92,171,106,135,234,11,149,183,116,192,55,207,111,79,171,8,224,135,222,231,110,98,189,101,248,61,132,26,161,165,10,196,57,23,51,4,202,236,118,20,132,224,196,143,54,10,147,167,97,71,222,216,26,5,102,142,167,126,160,29,209,68,203,190,124,137,95,188,152,76,47,134,195,201,45,35,185,217,240,146,211,36,253,156,193,34,163,243,217,108,58,253,219,238,155,79,84,234,189,210,244,9,224,166,104,12,43,211,39,15,251,105,71,78,168,18,94,102,66,186,169,196,141,111,221,11,98,48,207,28,212,131,40,181,226,158,10,212,67,221,11,211,194,213,170,233,135,88,87,173,24,49,64,116,184,62,47,249,250,56,130,141,143,173,215,98,14,96,214,185,216,115,224,67,247,166,159,197,29,157,153,237,239,206,148,74,112,223,186,59,85,233,147,135,233,3,155,134,11,
|
||||
152,192,124,88,48,216,153,173,15,178,222,243,226,144,165,157,214,61,67,95,139,74,97,153,208,94,221,174,177,223,171,202,210,192,37,121,185,167,234,21,218,18,175,119,213,120,90,15,231,255,39,165,192,145,53,118,79,229,47,188,6,183,57,210,63,120,13,227,184,162,151,123,23,95,226,69,229,8,224,155,119,51,164,119,89,113,125,183,31,212,127,116,175,124,171,42,196,55,117,31,80,237,134,26,190,3,96,26,169,132,91,189,68,111,112,71,198,135,64,137,154,201,212,122,191,166,68,232,82,104,169,46,240,129,76,232,89,45,214,236,205,245,21,203,160,19,75,17,252,253,250,245,225,74,154,76,247,55,226,174,9,162,218,74,172,85,174,187,98,20,241,217,10,237,96,103,234,161,91,52,17,97,15,243,205,142,52,195,224,15,158,252,103,135,251,77,223,250,105,23,148,249,146,58,214,255,185,161,76,166,127,102,71,15,222,190,17,88,135,120,57,96,136,150,40,37,98,184,187,57,245,75,42,8,202,218,178,159,220,252,234,241,88,230,32,180,168,110,202,9,51,82,225,151,40,90,
|
||||
75,125,44,105,26,38,65,156,198,85,154,158,104,56,1,91,20,126,197,34,163,77,63,201,185,53,29,115,112,46,34,246,22,35,25,250,222,192,119,245,156,55,210,182,52,141,31,156,246,175,67,66,254,62,1,52,48,182,184,140,208,80,35,1,16,149,158,212,138,29,185,47,69,173,246,11,51,17,152,155,252,105,238,189,207,133,251,110,118,120,108,238,102,134,133,143,30,77,221,43,37,11,175,13,232,155,245,155,225,192,79,115,110,185,90,75,16,104,38,230,170,135,139,180,135,164,191,233,164,98,246,197,192,103,182,184,115,107,89,225,63,149,81,67,1,211,181,212,176,88,122,18,70,70,243,96,236,118,235,150,68,43,116,1,220,222,32,214,234,214,171,131,107,193,131,47,3,221,183,8,172,162,48,250,212,155,110,150,156,148,28,245,77,131,34,89,131,98,142,153,169,104,164,110,144,77,20,144,113,21,226,12,167,158,47,200,9,189,53,174,95,242,232,107,130,139,33,50,81,177,233,193,5,233,154,18,197,51,19,38,79,183,93,103,24,109,238,224,99,65,159,251,6,238,181,252,
|
||||
195,237,252,9,125,60,65,245,145,17,223,146,102,64,75,129,184,209,146,211,147,71,210,68,180,136,72,153,127,128,49,21,17,196,92,67,211,36,160,67,44,65,31,54,232,161,164,152,30,210,242,201,1,139,24,162,86,219,239,52,187,159,2,94,249,169,200,125,32,32,74,195,172,77,19,178,183,204,109,58,46,121,233,23,42,47,170,36,63,138,31,82,70,220,229,196,197,9,125,233,160,111,8,245,162,165,109,167,255,124,67,150,240,176,220,248,141,146,98,213,239,111,161,148,253,7,7,183,244,121,28,31,210,246,179,139,218,122,240,104,134,113,203,31,100,58,67,70,67,39,7,254,34,201,126,246,239,158,75,191,217,116,120,141,216,123,192,134,10,223,34,64,30,191,6,44,71,163,68,119,165,247,98,203,195,125,240,93,25,74,250,16,72,151,61,72,159,202,57,170,133,189,122,255,62,253,60,26,30,68,186,195,239,227,111,92,88,29,52,35,187,86,188,36,36,116,108,212,135,167,243,149,128,19,218,191,39,56,176,242,116,122,5,251,239,221,87,77,108,252,132,20,99,11,60,54,
|
||||
194,118,115,228,108,246,111,189,171,45,69,
|
||||
|
||||
|
|
|
|||
|
|
@ -114,7 +114,7 @@ ideas]]
|
|||
::^l8/25r8/25t8/25b8/25R(165)-1 [s4;i150;O0;%% [^topic`:`/`/uppweb`/www`/codestyle`$en`-us^ Code style]&]
|
||||
[s4;i150;O0;%% [^topic`:`/`/uppweb`/www`/slack`$en`-us^ Team collaboration
|
||||
(Slack)]&]
|
||||
[s4;i150;O0;%% [^topic`:`/`/uppweb`/www`/bazaar`$en`-us^ Bazaar]&]
|
||||
[s4;i150;O0;%% [^topic`:`/`/ide`/app`/UppHub`_en`-us^ UppHub]&]
|
||||
[s4;i150;O0;%% [^topic`:`/`/ide`/app`/About`$en`-us^ Authors `& License]]
|
||||
::=l0/25r0/25t0/15b0/15R0 [s0; ]
|
||||
:: [s0; ]
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ COMPRESSED
|
|||
225,59,91,235,46,215,112,183,78,50,152,8,112,145,28,15,90,187,241,33,167,184,87,15,114,189,9,168,189,38,206,218,128,159,215,95,255,191,3,159,107,155,59,239,83,218,227,241,253,235,81,157,151,19,45,95,221,252,130,174,216,177,235,150,115,57,93,92,198,126,31,127,88,125,252,229,175,232,10,129,16,228,39,100,245,93,23,223,126,90,193,91,132,128,190,255,248,235,149,74,30,198,245,231,21,140,193,125,252,248,223,255,253,114,124,230,245,176,40,188,28,89,125,57,40,90,146,27,4,239,150,203,176,92,130,229,242,183,239,16,12,250,94,255,14,222,226,223,175,158,167,110,222,29,28,93,233,111,7,225,190,144,133,222,232,34,8,245,1,166,40,252,3,188,133,151,31,228,243,229,3,140,66,203,51,4,126,199,247,159,176,4,252,144,149,16,15,207,83,120,198,224,119,67,28,125,252,248,225,67,9,189,201,251,156,246,31,139,100,127,251,14,134,177,239,145,21,190,170,242,122,92,14,83,14,205,10,104,173,123,57,249,21,248,253,114,28,242,167,159,62,190,30,175,125,191,
|
||||
6,12,63,207,172,85,77,23,47,244,187,133,254,176,92,130,229,242,55,228,133,205,235,116,176,114,145,225,183,100,127,206,123,234,9,89,157,251,184,235,191,150,246,71,244,55,8,189,49,131,23,102,48,96,166,67,63,190,48,92,158,254,8,127,254,250,249,203,111,153,235,69,107,207,217,216,251,243,94,191,115,222,240,85,169,175,58,253,114,238,240,77,217,253,203,131,151,131,109,47,231,244,158,138,251,125,218,236,208,149,74,30,124,218,244,93,24,53,225,167,141,9,218,177,46,247,203,119,196,207,226,234,109,244,15,168,125,117,42,119,57,189,232,119,121,223,212,95,104,177,159,199,250,111,33,245,143,7,124,15,175,35,223,66,101,120,110,162,78,223,29,43,125,29,89,29,75,191,254,98,244,175,77,171,67,159,77,248,98,189,197,120,159,109,247,27,174,241,247,47,246,125,186,196,159,20,239,171,99,167,95,100,228,222,15,127,203,118,227,201,95,142,143,246,95,72,237,94,71,190,133,202,155,229,251,79,255,249,181,214,192,208,183,208,49,94,206,121,198,209,219,73,250,119,114,125,
|
||||
126,182,250,252,240,91,72,159,219,214,124,59,161,156,191,223,239,75,210,123,255,108,177,241,191,255,131,125,127,43,90,255,254,22,174,208,55,70,235,87,162,129,168,125,39,15,253,238,216,229,183,108,144,238,251,38,204,151,99,159,199,174,185,196,225,240,206,24,95,158,173,222,30,126,11,105,158,62,125,145,15,220,252,214,218,108,24,218,151,165,203,146,159,198,114,200,43,192,16,36,164,159,154,46,253,180,1,6,27,171,101,249,243,247,83,197,127,16,71,191,169,82,232,231,191,174,81,236,249,248,55,215,252,110,216,129,85,47,129,247,46,238,254,12,65,242,43,138,255,23,255,106,201,159,38,243,71,213,240,181,174,188,190,51,242,187,197,229,125,97,19,147,231,225,218,36,142,203,183,211,224,245,208,229,193,248,76,242,160,64,2,251,45,231,114,159,135,196,159,111,38,128,15,88,209,45,199,150,195,175,106,225,159,47,79,191,170,83,239,253,254,119,247,244,118,96,250,229,181,148,63,40,241,74,60,124,250,223,253,42,109,254,215,199,207,241,245,55,228,183,50,228,31,57,92,23,
|
||||
71,0,45,128,162,216,190,133,195,226,212,127,127,11,128,85,229,215,126,26,63,143,70,127,167,191,204,253,254,91,130,66,16,77,61,110,155,62,7,121,110,254,18,106,96,24,64,186,183,241,111,33,24,140,233,178,176,27,222,37,3,102,76,87,175,131,79,20,211,250,67,152,173,250,49,168,242,190,255,198,84,255,234,31,203,192,103,250,54,240,145,22,168,225,31,233,104,241,253,235,83,232,17,64,169,47,179,74,128,242,254,36,203,23,140,251,124,252,110,87,111,208,247,101,252,227,55,80,77,251,5,126,60,101,65,32,24,123,135,63,140,134,125,145,241,159,164,150,127,154,194,191,25,113,253,74,185,81,220,15,115,25,191,135,49,32,240,158,99,223,98,165,30,4,103,241,14,124,196,126,5,66,184,44,253,160,233,94,222,236,248,206,88,166,124,147,175,6,254,195,247,187,119,110,245,188,255,3,10,239,222,96,9,154,241,253,11,44,227,144,53,93,191,188,69,241,218,138,252,153,116,254,63,173,241,183,23,49,222,131,160,151,145,223,43,79,253,11,149,151,238,6,212,163,52,254,
|
||||
244,83,13,242,205,215,25,2,148,170,124,1,68,27,128,50,128,73,191,48,250,251,175,91,182,143,96,79,162,190,83,118,180,177,251,249,243,224,55,152,229,31,183,160,60,121,174,210,124,120,18,87,104,115,103,152,32,165,252,188,122,145,102,121,240,39,116,221,253,14,32,121,169,82,175,189,201,31,46,254,82,245,144,95,173,253,117,221,251,3,138,255,51,114,253,249,146,99,12,99,4,236,244,85,17,125,161,243,239,127,212,158,253,22,55,8,48,131,126,143,215,97,121,65,240,149,17,244,133,207,95,223,90,201,127,180,211,63,178,249,19,59,122,1,191,75,101,255,83,101,212,104,170,248,249,142,221,179,239,125,121,127,241,9,4,0,6,88,94,199,137,163,165,93,126,227,15,10,236,159,11,188,151,244,187,92,127,149,125,155,38,45,99,32,229,242,126,232,243,245,201,133,215,231,55,234,190,37,38,148,165,173,103,65,24,126,137,137,103,163,255,246,50,228,251,174,245,143,123,177,255,97,164,30,79,67,153,215,197,87,221,210,16,119,181,191,64,48,48,254,255,35,15,242,99,29,
|
||||
125,213,175,190,14,124,113,148,127,46,209,251,63,29,45,110,4,156,8,254,25,94,29,1,42,88,141,109,244,108,26,252,97,245,241,23,241,124,228,64,62,50,69,117,247,243,115,202,151,251,143,47,107,86,103,147,5,94,245,241,255,1,252,52,47,176,
|
||||
71,0,45,128,162,216,190,133,195,226,212,127,127,11,128,85,229,215,126,26,63,143,70,127,167,191,204,253,254,91,130,66,16,77,61,110,155,62,7,121,110,254,18,106,96,24,64,186,183,241,111,33,24,140,233,178,176,27,222,37,3,102,76,87,175,131,79,20,211,250,67,152,173,250,49,168,242,190,255,198,84,255,234,31,203,192,103,250,54,240,145,22,168,225,31,233,104,241,253,235,83,232,17,64,169,47,179,74,128,242,254,36,203,23,140,251,124,252,110,87,111,208,247,101,252,227,55,80,77,251,5,126,60,101,65,32,24,123,135,63,140,134,125,145,241,159,164,150,127,154,194,191,25,113,253,74,185,81,220,15,115,25,191,135,49,32,240,158,99,223,98,165,30,4,103,241,14,124,196,126,5,66,184,44,253,160,233,94,222,236,248,206,88,166,252,145,175,126,193,131,160,242,237,199,224,139,135,190,220,255,233,229,116,208,140,239,223,94,25,135,172,233,250,229,21,138,215,62,228,207,228,242,255,105,117,191,189,133,241,30,1,189,140,252,94,109,234,95,168,188,180,54,160,24,165,241,
|
||||
167,159,106,144,108,190,78,15,160,78,229,11,26,218,0,136,1,236,249,133,209,223,127,221,175,125,4,123,18,245,157,178,163,141,221,207,159,7,191,193,208,255,184,5,229,201,115,149,230,195,147,184,66,155,59,195,4,249,228,231,213,139,52,203,131,63,161,235,238,119,208,200,75,137,122,109,76,254,112,241,151,146,135,252,106,237,175,139,222,31,80,252,159,145,235,207,215,27,99,24,35,96,167,175,42,232,11,157,127,255,163,222,236,183,184,65,128,25,244,123,188,14,203,219,129,175,140,160,47,124,254,250,214,71,254,163,157,254,145,205,159,216,209,11,242,93,202,250,159,170,161,70,83,197,207,23,236,158,77,239,203,203,139,79,20,0,0,192,242,46,78,28,45,189,242,27,127,80,93,255,92,224,189,228,222,229,250,171,212,219,52,105,25,3,41,151,151,67,159,239,78,46,188,62,191,78,247,45,49,161,44,61,61,11,194,240,75,76,60,187,252,183,55,33,223,183,172,127,220,136,253,15,195,244,120,26,202,188,46,190,106,149,134,184,171,253,5,127,129,241,255,31,121,144,31,235,
|
||||
232,171,102,245,117,224,139,163,252,115,137,222,255,221,104,113,35,224,68,240,207,240,234,8,32,193,106,108,163,103,199,224,15,171,143,191,136,231,35,7,242,145,41,170,187,159,159,83,190,220,127,124,89,179,58,155,44,240,170,143,255,15,17,120,46,76,
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
SSH package for Ultimate++
|
||||
|
||||
Copyright (c) 2016, 2021, İsmail Yılmaz
|
||||
Copyright (c) 2016, 2022, İsmail Yılmaz
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification, are permitted
|
||||
|
|
|
|||
|
|
@ -1,50 +0,0 @@
|
|||
SSH package for U++
|
||||
--------------------
|
||||
SSH package is a flexible, easy-to-use, yet powerful libssh2 wrapper for Ultimate++.
|
||||
It supports both console and GUI-based applications on POSIX-compliant operating systems and
|
||||
MS Windows (tm).
|
||||
|
||||
Classes:
|
||||
--------------------
|
||||
|
||||
- Base (core) class -> Ssh
|
||||
- Ssh session -----> SshSession
|
||||
- Sftp subsystem -----> SFtp
|
||||
- SFtp Stream interface -----> SFtpStream
|
||||
- File system transparency -----> SFtpFileSystemInfo
|
||||
- Ssh channel -----> SshChannel
|
||||
- Scp channel -----> Scp
|
||||
- Exec channel -----> SshExec
|
||||
- Real-time interactive shell -----> SshShell
|
||||
- X11 forwarding -----> SshShell (as operation mode)
|
||||
- Tcp/IP and port forwarding -----> SshTunnel
|
||||
- Known hosts manager -> SshHosts
|
||||
|
||||
Features and Highlights:
|
||||
--------------------
|
||||
|
||||
- Ssh-derived classes have pick semantics, based on RAII principle, support RTTI, and allow
|
||||
polymorphism (i.e. different classes can be stored in the same array, etc.) through a common
|
||||
interface.
|
||||
- Uses U++'s memory manager (Native manager (malloc) is also a compile-time option)
|
||||
- Uses OpenSSL by default.
|
||||
- Supports multithreading.
|
||||
- Supports 3rd-party network proxies.
|
||||
- Supports known hosts verification mechanism.
|
||||
- Supports password, public key, host-based, and keyboard-interactive authentication methods.
|
||||
- Supports ssh-agents.
|
||||
- Supports real-time interactive command line (shell) interface with both console and GUI integration
|
||||
(SshShell works on both Windows and Posix-compliant OSes)
|
||||
- Supports X11 forwarding.
|
||||
(A single SShShell instance is capable of handling multiple X11 requests simultaneously.)
|
||||
- Supports Tcp/IP and port forwarding.
|
||||
- Supports stream operations on SFTP objects.
|
||||
- Supports access to sftp folder hiearcy in a file-system-agnostic (transparent) way.
|
||||
- Supports detailed (full) debug logging.
|
||||
|
||||
Reference examples:
|
||||
-------------------
|
||||
|
||||
- SshBasics: Demonstrates basic capabilities of SSH package.
|
||||
- SFtpFileSel: Demonstrates FileSel integration of SFtp class, using FileSystemInfo interface.
|
||||
- SFtpBrowser: Demonstrates a basic sftp browser with GUI.
|
||||
80
uppsrc/Core/SSH/ReadMe.md
Normal file
80
uppsrc/Core/SSH/ReadMe.md
Normal file
|
|
@ -0,0 +1,80 @@
|
|||
# SSH package for U++
|
||||
|
||||
SSH package is a flexible, easy-to-use, yet powerful [libssh2](https://www.libssh2.org/) wrapper for Ultimate++.
|
||||
It supports both console and GUI-based applications on POSIX-compliant operating systems and
|
||||
MS Windows (tm).
|
||||
|
||||
## Classes:
|
||||
|
||||
```
|
||||
- Base (core) class -> Ssh
|
||||
- Ssh session -----> SshSession
|
||||
- Sftp subsystem -----> SFtp
|
||||
- SFtp Stream interface -----> SFtpStream
|
||||
- File system transparency -----> SFtpFileSystemInfo
|
||||
- Ssh channel -----> SshChannel
|
||||
- Scp channel -----> Scp
|
||||
- Exec channel -----> SshExec
|
||||
- Real-time interactive shell -----> SshShell
|
||||
- X11 forwarding -----> SshShell (as operation mode)
|
||||
- Tcp/IP and port forwarding -----> SshTunnel
|
||||
- Known hosts manager -> SshHosts
|
||||
```
|
||||
|
||||
## Features and Highlights:
|
||||
|
||||
- Ssh-derived classes have pick semantics, based on RAII principle, support RTTI, and allow
|
||||
polymorphism (i.e. different classes can be stored in the same array, etc.) through a common
|
||||
interface.
|
||||
- Uses U++'s memory manager (Native manager (malloc) is also a compile-time option)
|
||||
- Uses OpenSSL by default.
|
||||
- Supports multithreading.
|
||||
- Supports 3rd-party network proxies.
|
||||
- Supports known hosts verification mechanism.
|
||||
- Supports password, public key, host-based, and keyboard-interactive authentication methods.
|
||||
- Supports ssh-agents.
|
||||
- Supports real-time interactive command line (shell) interface with both console and GUI integration
|
||||
(SshShell works on both Windows and Posix-compliant OSes)
|
||||
- Supports X11 forwarding.
|
||||
(A single SShShell instance is capable of handling multiple X11 requests simultaneously.)
|
||||
- Supports Tcp/IP and port forwarding.
|
||||
- Supports stream operations on SFTP objects.
|
||||
- Supports access to sftp folder hiearcy in a file-system-agnostic (transparent) way.
|
||||
- Supports detailed (full) debug logging.
|
||||
|
||||
## Reference examples:
|
||||
|
||||
|
||||
+ *SshBasics*: Demonstrates basic capabilities of SSH package.
|
||||
+ *SFtpFileSel*: Demonstrates FileSel integration of SFtp class, using FileSystemInfo interface.
|
||||
+ *SFtpBrowser*: Demonstrates a basic sftp browser with GUI.
|
||||
|
||||
## License
|
||||
```
|
||||
Copyright (c) 2019-2022, İsmail Yılmaz
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice, this
|
||||
list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of the copyright holder nor the names of its
|
||||
contributors may be used to endorse or promote products derived from
|
||||
this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
|
@ -550,39 +550,6 @@ String SFtp::DirEntry::ToString() const
|
|||
GetName());
|
||||
}
|
||||
|
||||
String SFtp::DirEntry::ToXml() const
|
||||
{
|
||||
if(!valid) return XmlTag("<N/A>").Text("<N/A>");
|
||||
static const char *hypen = "-", *r = "r", *w = "w", *x = "x";
|
||||
return XmlTag("sftp:direntry")
|
||||
("type", (IsFile()
|
||||
? "file" : (IsDirectory()
|
||||
? "directory" : (IsSymLink()
|
||||
? "symlink" : (IsSocket()
|
||||
? "socket" : (IsPipe()
|
||||
? "pipe" : (IsBlock()
|
||||
? "block-special" : (IsSpecial()
|
||||
? "character-special" : "other")
|
||||
)))))))
|
||||
("uid", AsString(GetUid()))
|
||||
("gid", AsString(GetGid()))
|
||||
("size", AsString(GetSize()))
|
||||
("modified", AsString(GetLastModified()))
|
||||
("accessed", AsString(GetLastAccessed()))
|
||||
("permissions", Format("%c%c%c%c%c%c%c%c%c",
|
||||
((a->permissions & IRUSR) ? *r : *hypen),
|
||||
((a->permissions & IWUSR) ? *w : *hypen),
|
||||
((a->permissions & IXUSR) ? *x : *hypen),
|
||||
((a->permissions & IRGRP) ? *r : *hypen),
|
||||
((a->permissions & IWGRP) ? *w : *hypen),
|
||||
((a->permissions & IXGRP) ? *x : *hypen),
|
||||
((a->permissions & IROTH) ? *r : *hypen),
|
||||
((a->permissions & IWOTH) ? *w : *hypen),
|
||||
((a->permissions & IXOTH) ? *x : *hypen)
|
||||
))
|
||||
.Text(GetName());
|
||||
}
|
||||
|
||||
FileSystemInfo::FileInfo SFtp::DirEntry::ToFileInfo() const
|
||||
{
|
||||
FileSystemInfo::FileInfo fi;
|
||||
|
|
|
|||
|
|
@ -69,10 +69,6 @@ public:
|
|||
DirEntry(DirEntry&&) = default;
|
||||
DirEntry& operator=(DirEntry&&) = default;
|
||||
|
||||
// Deprecated stuff.
|
||||
[[deprecated("Will be removed with U++ 2021.2.")]]
|
||||
String ToXml() const;
|
||||
|
||||
private:
|
||||
bool CanMode(dword u, dword g, dword o) const;
|
||||
void Zero();
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@ file
|
|||
Docs readonly separator,
|
||||
src.tpp,
|
||||
Info readonly separator,
|
||||
ReadMe,
|
||||
ReadMe.md,
|
||||
Copying,
|
||||
Todo,
|
||||
Issues;
|
||||
|
|
|
|||
|
|
@ -205,32 +205,12 @@ bool SshSession::Connect(const String& host, int port, const String& user, const
|
|||
if(!rc) {
|
||||
LLOG("Handshake successful.");
|
||||
WhenPhase(PHASE_AUTHORIZATION);
|
||||
if(WhenVerify && !WhenVerify(host, port))
|
||||
ThrowError(-1);
|
||||
}
|
||||
return !rc;
|
||||
})) goto Bailout;
|
||||
|
||||
if(!Run([=] () mutable {
|
||||
switch(session->hashtype) { // TODO: Remove this block along with the deprecated Hashtype()
|
||||
case HASH_MD5: // and GetFingerprint() methods, in the future versions.
|
||||
session->fingerprint = GetMD5Fingerprint();
|
||||
LLOG("MD5 fingerprint of " << host << ": " << HexString(session->fingerprint, 1, ':'));
|
||||
break;
|
||||
case HASH_SHA1:
|
||||
session->fingerprint = GetSHA1Fingerprint();
|
||||
LLOG("SHA1 fingerprint of " << host << ": " << HexString(session->fingerprint, 1, ':'));
|
||||
break;
|
||||
case HASH_SHA256:
|
||||
session->fingerprint = GetSHA256Fingerprint();
|
||||
LLOG("SHA256 fingerprint of " << host << ": " << Base64Encode(session->fingerprint));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if(WhenVerify && !WhenVerify(host, port))
|
||||
ThrowError(-1);
|
||||
return true;
|
||||
})) goto Bailout;
|
||||
|
||||
if(!Run([=] () mutable {
|
||||
session->authmethods = libssh2_userauth_list(ssh->session, user, user.GetLength());
|
||||
if(IsNull(session->authmethods)) {
|
||||
|
|
@ -485,7 +465,6 @@ SshSession::SshSession()
|
|||
session->connected = false;
|
||||
session->keyfile = true;
|
||||
session->compression = false;
|
||||
session->hashtype = HASH_SHA256;
|
||||
}
|
||||
|
||||
SshSession::~SshSession()
|
||||
|
|
|
|||
|
|
@ -72,13 +72,6 @@ public:
|
|||
|
||||
SshSession(SshSession&&) = default;
|
||||
|
||||
// DEPRECATED stuff.
|
||||
enum Hash { HASH_MD5, HASH_SHA1, HASH_SHA256 };
|
||||
[[deprecated("Will be removed with U++ 2021.2. Use GetxxxFingerprint() methods instead.")]]
|
||||
String GetFingerprint() const { return session->fingerprint; }
|
||||
[[deprecated("Will be removed with U++ 2021.2. Use GetxxxFingerprint() methods instead.")]]
|
||||
SshSession& HashType(Hash h) { session->hashtype = h; return *this; }
|
||||
|
||||
private:
|
||||
void Exit() override;
|
||||
String GetHostKeyHash(int type, int length) const;
|
||||
|
|
@ -88,8 +81,6 @@ private:
|
|||
|
||||
struct SessionData {
|
||||
TcpSocket socket;
|
||||
String fingerprint;
|
||||
int hashtype;
|
||||
String authmethods;
|
||||
int authmethod;
|
||||
String prikey;
|
||||
|
|
|
|||
1
uppsrc/Core/SSH/libssh2/ChangeLog
Normal file
1
uppsrc/Core/SSH/libssh2/ChangeLog
Normal file
|
|
@ -0,0 +1 @@
|
|||
see NEWS
|
||||
|
|
@ -2,8 +2,10 @@
|
|||
* Copyright (c) 2005,2006 Mikhail Gusarov <dottedmag@dottedmag.net>
|
||||
* Copyright (c) 2006-2007 The Written Word, Inc.
|
||||
* Copyright (c) 2007 Eli Fant <elifantu@mail.ru>
|
||||
* Copyright (c) 2009-2019 Daniel Stenberg
|
||||
* Copyright (c) 2009-2021 Daniel Stenberg
|
||||
* Copyright (C) 2008, 2009 Simon Josefsson
|
||||
* Copyright (c) 2000 Markus Friedl
|
||||
* Copyright (c) 2015 Microsoft Corp.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms,
|
||||
|
|
|
|||
|
|
@ -1,6 +1,448 @@
|
|||
Changelog for the libssh2 project. Generated with git2news.pl
|
||||
|
||||
GitHub (11 Nov 2020)
|
||||
Daniel Stenberg (29 Aug 2021)
|
||||
- [Will Cosgrove brought this change]
|
||||
|
||||
updated docs for 1.10.0 release
|
||||
|
||||
Marc Hörsken (30 May 2021)
|
||||
- [Laurent Stacul brought this change]
|
||||
|
||||
[tests] Try several times to connect the ssh server
|
||||
|
||||
Sometimes, as the OCI container is run in detached mode, it is possible
|
||||
the actual server is not ready yet to handle SSH traffic. The goal of
|
||||
this PR is to try several times (max 3). The mechanism is the same as
|
||||
for the connection to the docker machine.
|
||||
|
||||
- [Laurent Stacul brought this change]
|
||||
|
||||
Remove openssh_server container on test exit
|
||||
|
||||
- [Laurent Stacul brought this change]
|
||||
|
||||
Allow the tests to run inside a container
|
||||
|
||||
The current tests suite starts SSH server as OCI container. This commit
|
||||
add the possibility to run the tests in a container provided that:
|
||||
|
||||
* the docker client is installed builder container
|
||||
* the host docker daemon unix socket has been mounted in the builder
|
||||
container (with, if needed, the DOCKER_HOST environment variable
|
||||
accordingly set, and the permission to write on this socket)
|
||||
* the builder container is run on the default bridge network, or the
|
||||
host network. This PR does not handle the case where the builder
|
||||
container is on another network.
|
||||
|
||||
Marc Hoersken (28 May 2021)
|
||||
- CI/appveyor: run SSH server for tests on GitHub Actions (#607)
|
||||
|
||||
No longer rely on DigitalOcean to host the Docker container.
|
||||
|
||||
Unfortunately we require a small dispatcher script that has
|
||||
access to a GitHub access token with scope repo in order to
|
||||
trigger the daemon workflow on GitHub Actions also for PRs.
|
||||
|
||||
This script is hosted by myself for the time being until GitHub
|
||||
provides a tighter scope to trigger the workflow_dispatch event.
|
||||
|
||||
GitHub (26 May 2021)
|
||||
- [Will Cosgrove brought this change]
|
||||
|
||||
openssl.c: guards around calling FIPS_mode() #596 (#603)
|
||||
|
||||
Notes:
|
||||
FIPS_mode() is not implemented in LibreSSL and this API is removed in OpenSSL 3.0 and was introduced in 0.9.7. Added guards around making this call.
|
||||
|
||||
Credit:
|
||||
Will Cosgrove
|
||||
|
||||
- [Will Cosgrove brought this change]
|
||||
|
||||
configure.ac: don't undefine scoped variable (#594)
|
||||
|
||||
* configure.ac: don't undefine scoped variable
|
||||
|
||||
To get this script to run with Autoconf 2.71 on macOS I had to remove the undefine of the backend for loop variable. It seems scoped to the for loop and also isn't referenced later in the script so it seems OK to remove it.
|
||||
|
||||
* configure.ac: remove cygwin specific CFLAGS #598
|
||||
|
||||
Notes:
|
||||
Remove cygwin specific Win32 CFLAGS and treat the build like a posix build
|
||||
|
||||
Credit:
|
||||
Will Cosgrove, Brian Inglis
|
||||
|
||||
- [Laurent Stacul brought this change]
|
||||
|
||||
tests: Makefile.am: Add missing tests client keys in distribution tarball (#604)
|
||||
|
||||
Notes:
|
||||
Added missing test keys.
|
||||
|
||||
Credit:
|
||||
Laurent Stacul
|
||||
|
||||
- [Laurent Stacul brought this change]
|
||||
|
||||
Makefile.am: Add missing test keys in the distribution tarball (#601)
|
||||
|
||||
Notes:
|
||||
Fix tests missing key to build the OCI image
|
||||
|
||||
Credit:
|
||||
Laurent Stacul
|
||||
|
||||
Daniel Stenberg (16 May 2021)
|
||||
- dist: add src/agent.h
|
||||
|
||||
Fixes #597
|
||||
Closes #599
|
||||
|
||||
GitHub (12 May 2021)
|
||||
- [Will Cosgrove brought this change]
|
||||
|
||||
packet.c: Reset read timeout after received a packet (#576) (#586)
|
||||
|
||||
File:
|
||||
packet.c
|
||||
|
||||
Notes:
|
||||
Attempt keyboard interactive login (Azure AD 2FA login) and use more than 60 seconds to complete the login, the connection fails.
|
||||
|
||||
The _libssh2_packet_require function does almost the same as _libssh2_packet_requirev but this function sets state->start = 0 before returning.
|
||||
|
||||
Credit:
|
||||
teottin, Co-authored-by: Tor Erik Ottinsen <tor.ottinsen@kdi.kongsberg.com>
|
||||
|
||||
- [kkoenig brought this change]
|
||||
|
||||
Support ECDSA certificate authentication (#570)
|
||||
|
||||
Files: hostkey.c, userauth.c, test_public_key_auth_succeeds_with_correct_ecdsa_key.c
|
||||
|
||||
Notes:
|
||||
Support ECDSA certificate authentication
|
||||
|
||||
Add a test for:
|
||||
- Existing ecdsa basic public key authentication
|
||||
- ecdsa public key authentication with a signed public key
|
||||
|
||||
Credit:
|
||||
kkoenig
|
||||
|
||||
- [Gabriel Smith brought this change]
|
||||
|
||||
agent.c: Add support for Windows OpenSSH agent (#517)
|
||||
|
||||
Files: agent.c, agent.h, agent_win.c
|
||||
|
||||
Notes:
|
||||
* agent: Add support for Windows OpenSSH agent
|
||||
|
||||
The implementation was partially taken and modified from that found in
|
||||
the Portable OpenSSH port to Win32 by the PowerShell team, but mostly
|
||||
based on the existing Unix OpenSSH agent support.
|
||||
|
||||
https://github.com/PowerShell/openssh-portable
|
||||
|
||||
Regarding the partial transfer support implementation: partial transfers
|
||||
are easy to deal with, but you need to track additional state when
|
||||
non-blocking IO enters the picture. A tracker of how many bytes have
|
||||
been transfered has been placed in the transfer context struct as that's
|
||||
where it makes most sense. This tracker isn't placed behind a WIN32
|
||||
#ifdef as it will probably be useful for other agent implementations.
|
||||
|
||||
* agent: win32 openssh: Disable overlapped IO
|
||||
|
||||
Non-blocking IO is not currently supported by the surrounding agent
|
||||
code, despite a lot of the code having everything set up to handle it.
|
||||
|
||||
Credit:
|
||||
Co-authored-by: Gabriel Smith <gabriel.smith@precisionot.com>
|
||||
|
||||
- [Zenju brought this change]
|
||||
|
||||
Fix detailed _libssh2_error being overwritten (#473)
|
||||
|
||||
Files: openssl.c, pem.c, userauth.c
|
||||
|
||||
Notes:
|
||||
* Fix detailed _libssh2_error being overwritten by generic errors
|
||||
* Unified error handling
|
||||
|
||||
Credit:
|
||||
Zenju
|
||||
|
||||
- [Paul Capron brought this change]
|
||||
|
||||
Fix _libssh2_random() silently discarding errors (#520)
|
||||
|
||||
Notes:
|
||||
* Make _libssh2_random return code consistent
|
||||
|
||||
Previously, _libssh2_random was advertized in HACKING.CRYPTO as
|
||||
returning `void` (and was implemented that way in os400qc3.c), but that
|
||||
was in other crypto backends a lie; _libssh2_random is (a macro
|
||||
expanding) to an int-value expression or function.
|
||||
|
||||
Moreover, that returned code was:
|
||||
— 0 or success, -1 on error for the MbedTLS & WinCNG crypto backends
|
||||
But also:
|
||||
— 1 on success, -1 or 0 on error for the OpenSSL backend!
|
||||
– 1 on success, error cannot happen for libgcrypt!
|
||||
|
||||
This commit makes explicit that _libssh2_random can fail (because most of
|
||||
the underlying crypto functions can indeed fail!), and it makes its result
|
||||
code consistent: 0 on success, -1 on error.
|
||||
|
||||
This is related to issue #519 https://github.com/libssh2/libssh2/issues/519
|
||||
It fixes the first half of it.
|
||||
|
||||
* Don't silent errors of _libssh2_random
|
||||
|
||||
Make sure to check the returned code of _libssh2_random(), and
|
||||
propagates any failure.
|
||||
|
||||
A new LIBSSH_ERROR_RANDGEN constant is added to libssh2.h
|
||||
None of the existing error constants seemed fit.
|
||||
|
||||
This commit is related to d74285b68450c0e9ea6d5f8070450837fb1e74a7
|
||||
and to https://github.com/libssh2/libssh2/issues/519 (see the issue
|
||||
for more info.) It closes #519.
|
||||
|
||||
Credit:
|
||||
Paul Capron
|
||||
|
||||
- [Gabriel Smith brought this change]
|
||||
|
||||
ci: Remove caching of docker image layers (#589)
|
||||
|
||||
Notes:
|
||||
continued ci reliability work.
|
||||
|
||||
Credit:
|
||||
Gabriel Smith
|
||||
|
||||
- [Gabriel Smith brought this change]
|
||||
|
||||
ci: Speed up docker builds for tests (#587)
|
||||
|
||||
Notes:
|
||||
The OpenSSH server docker image used for tests is pre-built to prevent
|
||||
wasting time building it during a test, and unneeded rebuilds are
|
||||
prevented by caching the image layers.
|
||||
|
||||
Credit:
|
||||
Gabriel Smith
|
||||
|
||||
- [Will Cosgrove brought this change]
|
||||
|
||||
userauth.c: don't error if using keys without RSA (#555)
|
||||
|
||||
file: userauth.c
|
||||
|
||||
notes: libssh2 now supports many other key types besides RSA, if the library is built without RSA support and a user attempts RSA auth it shouldn't be an automatic error
|
||||
|
||||
credit:
|
||||
Will Cosgrove
|
||||
|
||||
- [Marc brought this change]
|
||||
|
||||
openssl.c: Avoid OpenSSL latent error in FIPS mode (#528)
|
||||
|
||||
File:
|
||||
openssl.c
|
||||
|
||||
Notes:
|
||||
Avoid initing MD5 digest, which is not permitted in OpenSSL FIPS certified cryptography mode.
|
||||
|
||||
Credit:
|
||||
Marc
|
||||
|
||||
- [Laurent Stacul brought this change]
|
||||
|
||||
openssl.c: Fix EVP_Cipher interface change in openssl 3 #463
|
||||
|
||||
File:
|
||||
openssl.c
|
||||
|
||||
Notes:
|
||||
Fixes building with OpenSSL 3, #463.
|
||||
|
||||
The change is described there:
|
||||
https://github.com/openssl/openssl/commit/f7397f0d58ce7ddf4c5366cd1846f16b341fbe43
|
||||
|
||||
Credit:
|
||||
Laurent Stacul, reported by Sergei
|
||||
|
||||
- [Gabriel Smith brought this change]
|
||||
|
||||
openssh_fixture.c: Fix potential overwrite of buffer when reading stdout of command (#580)
|
||||
|
||||
File:
|
||||
openssh_fixture.c
|
||||
Notes:
|
||||
If reading the full output from the executed command took multiple
|
||||
passes (such as when reading multiple lines) the old code would read
|
||||
into the buffer starting at the some position (the start) every time.
|
||||
The old code only works if fgets updated p or had an offset parameter,
|
||||
both of which are not true.
|
||||
|
||||
Credit:
|
||||
Gabriel Smith
|
||||
|
||||
- [Gabriel Smith brought this change]
|
||||
|
||||
ci: explicitly state the default branch (#585)
|
||||
|
||||
Notes:
|
||||
It looks like the $default-branch macro only works in templates, not
|
||||
workflows. This is not explicitly stated anywhere except the linked PR
|
||||
comment.
|
||||
|
||||
https://github.com/actions/starter-workflows/pull/590#issuecomment-672360634
|
||||
|
||||
credit:
|
||||
Gabriel Smith
|
||||
|
||||
- [Gabriel Smith brought this change]
|
||||
|
||||
ci: Swap from Travis to Github Actions (#581)
|
||||
|
||||
Files: ci files
|
||||
|
||||
Notes:
|
||||
Move Linux CI using Github Actions
|
||||
|
||||
Credit:
|
||||
Gabriel Smith, Marc Hörsken
|
||||
|
||||
- [Mary brought this change]
|
||||
|
||||
libssh2_priv.h: add iovec on 3ds (#575)
|
||||
|
||||
file: libssh2_priv.h
|
||||
note: include iovec for 3DS
|
||||
credit: Mary Mstrodl
|
||||
|
||||
- [Laurent Stacul brought this change]
|
||||
|
||||
Tests: Fix unused variables warning (#561)
|
||||
|
||||
file: test_public_key_auth_succeeds_with_correct_ed25519_key_from_mem.c
|
||||
|
||||
notes: fixed unused vars
|
||||
|
||||
credit:
|
||||
Laurent Stacul
|
||||
|
||||
- [Viktor Szakats brought this change]
|
||||
|
||||
bcrypt_pbkdf.c: fix clang10 false positive warning (#563)
|
||||
|
||||
File: bcrypt_pbkdf.c
|
||||
|
||||
Notes:
|
||||
blf_enc() takes a number of 64-bit blocks to encrypt, but using
|
||||
sizeof(uint64_t) in the calculation triggers a warning with
|
||||
clang 10 because the actual data type is uint32_t. Pass
|
||||
BCRYPT_BLOCKS / 2 for the number of blocks like libc bcrypt(3)
|
||||
does.
|
||||
|
||||
Ref: https://github.com/openbsd/src/commit/04a2240bd8f465bcae6b595d912af3e2965856de
|
||||
|
||||
Fixes #562
|
||||
|
||||
Credit:
|
||||
Viktor Szakats
|
||||
|
||||
- [Will Cosgrove brought this change]
|
||||
|
||||
transport.c: release payload on error (#554)
|
||||
|
||||
file: transport.c
|
||||
notes: If the payload is invalid and there is an early return, we could leak the payload
|
||||
credit:
|
||||
Will Cosgrove
|
||||
|
||||
- [Will Cosgrove brought this change]
|
||||
|
||||
ssh2_client_fuzzer.cc: fixed building
|
||||
|
||||
The GitHub web editor did some funky things
|
||||
|
||||
- [Will Cosgrove brought this change]
|
||||
|
||||
ssh_client_fuzzer.cc: set blocking mode on (#553)
|
||||
|
||||
file: ssh_client_fuzzer.cc
|
||||
|
||||
notes: the session needs blocking mode turned on to avoid EAGAIN being returned from libssh2_session_handshake()
|
||||
|
||||
credit:
|
||||
Will Cosgrove, reviewed by Michael Buckley
|
||||
|
||||
- [Etienne Samson brought this change]
|
||||
|
||||
Add a LINT option to CMake (#372)
|
||||
|
||||
* ci: make style-checking available locally
|
||||
|
||||
* cmake: add a linting target
|
||||
|
||||
* tests: check test suite syntax with checksrc.pl
|
||||
|
||||
- [Will Cosgrove brought this change]
|
||||
|
||||
kex.c: kex_agree_instr() improve string reading (#552)
|
||||
|
||||
* kex.c: kex_agree_instr() improve string reading
|
||||
|
||||
file: kex.c
|
||||
notes: if haystack isn't null terminated we should use memchr() not strchar(). We should also make sure we don't walk off the end of the buffer.
|
||||
credit:
|
||||
Will Cosgrove, reviewed by Michael Buckley
|
||||
|
||||
- [Will Cosgrove brought this change]
|
||||
|
||||
kex.c: use string_buf in ecdh_sha2_nistp (#551)
|
||||
|
||||
* kex.c: use string_buf in ecdh_sha2_nistp
|
||||
|
||||
file: kex.c
|
||||
|
||||
notes:
|
||||
use string_buf in ecdh_sha2_nistp() to avoid attempting to parse malformed data
|
||||
|
||||
- [Will Cosgrove brought this change]
|
||||
|
||||
kex.c: move EC macro outside of if check #549 (#550)
|
||||
|
||||
File: kex.c
|
||||
|
||||
Notes:
|
||||
Moved the macro LIBSSH2_KEX_METHOD_EC_SHA_HASH_CREATE_VERIFY outside of the LIBSSH2_ECDSA since it's also now used by the ED25519 code.
|
||||
|
||||
Sha 256, 384 and 512 need to be defined for all backends now even if they aren't used directly. I believe this is already the case, but just a heads up.
|
||||
|
||||
Credit:
|
||||
Stefan-Ghinea
|
||||
|
||||
- [Tim Gates brought this change]
|
||||
|
||||
kex.c: fix simple typo, niumber -> number (#545)
|
||||
|
||||
File: kex.c
|
||||
|
||||
Notes:
|
||||
There is a small typo in src/kex.c.
|
||||
|
||||
Should read `number` rather than `niumber`.
|
||||
|
||||
Credit:
|
||||
Tim Gates
|
||||
|
||||
- [Tseng Jun brought this change]
|
||||
|
||||
session.c: Correct a typo which may lead to stack overflow (#533)
|
||||
|
|
@ -3200,7 +3642,7 @@ Alexander Lamaison (13 Mar 2015)
|
|||
- Without zlib
|
||||
|
||||
Conflicts:
|
||||
README
|
||||
README
|
||||
|
||||
- Man man syntax tests fail gracefully if man version is not suitable.
|
||||
|
||||
|
|
@ -3275,18 +3717,18 @@ Guenter Knauf (8 Jan 2015)
|
|||
Marc Hoersken (29 Dec 2014)
|
||||
- knownhost.c: fix use of uninitialized argument variable wrote
|
||||
|
||||
Detected by clang scan in line 1195, column 18.
|
||||
Detected by clang scan in line 1195, column 18.
|
||||
|
||||
- examples/x11.c: fix result of operation is garbage or undefined
|
||||
|
||||
Fix use of uninitialized structure w_size_bck.
|
||||
Detected by clang scan in line 386, column 28.
|
||||
Detected by clang scan in line 386, column 28.
|
||||
|
||||
- examples/x11.c: remove dead assigments of some return values
|
||||
|
||||
Detected by clang scan in line 212, column 9.
|
||||
Detected by clang scan in line 222, column 13.
|
||||
Detected by clang scan in line 410, column 13.
|
||||
Detected by clang scan in line 410, column 13.
|
||||
|
||||
- examples/x11.c: fix possible memory leak if read fails
|
||||
|
||||
|
|
@ -6387,155 +6829,3 @@ Peter Stuge (17 Jun 2010)
|
|||
|
||||
Daniel Stenberg (16 Jun 2010)
|
||||
- libssh2_session_callback_set: extended the man page
|
||||
|
||||
- [John brought this change]
|
||||
|
||||
LIBSSH2_DEBUG: macro uses incorrect function variable
|
||||
|
||||
The LIBSSH2_DEBUG macro, defined in libssh2_priv.h, incorrectly uses the
|
||||
function variable ssh_msg_disconnect when it should use ssh_msg_debug.
|
||||
|
||||
This shows that the LIBSSH2_CALLBACK_DEBUG callback never has worked...
|
||||
|
||||
- warning: fix a compiler warning 'pointer differs in signedness'
|
||||
|
||||
As reported in bug #177
|
||||
|
||||
- portability: introduce LIBSSH2_INT64_T_FORMAT for 64bit printf()s
|
||||
|
||||
As pointed out in bug #177, some of the Windows compilers use
|
||||
%I64 to output 64 bit variables with the printf family.
|
||||
|
||||
- debug: avoid sending NULL to sprintf %s
|
||||
|
||||
Via the _libssh2_debug() macro/function. Pointed out by john in bug report
|
||||
|
||||
- sftp docs: show macro on macro page, only function on function page
|
||||
|
||||
The individual man pages for macros now show the full convenience
|
||||
macro as defined, and then the man page for the actual function
|
||||
only shows the function.
|
||||
|
||||
- code police: make the code use less than 80 columns
|
||||
|
||||
- libssh2_channel_write_ex: remove macros, added wording on buffer size
|
||||
|
||||
- libssh2_sftp_write: document buffer size and changed some ordering
|
||||
|
||||
- libssh2_channel_write_stderr: show how the macro is defined
|
||||
|
||||
- libssh2_channel_write: show how the macro is defined
|
||||
|
||||
- SFTP: limit write() to not produce overly large packets
|
||||
|
||||
sftp_write() now limits how much data it gets at a time even more
|
||||
than before. Since this function creates a complete outgoing
|
||||
packet based on what gets passed to it, it is crucial that it
|
||||
doesn't create too large packets.
|
||||
|
||||
With this method, there's also no longer any problem to use very
|
||||
large buffers in your application and feed that to libssh2. I've
|
||||
done numerous tests now with uploading data over SFTP using 100K
|
||||
buffers and I've had no problems with that.
|
||||
|
||||
- scp_write_nonblock: add transfer time info
|
||||
|
||||
Using the same timing logic and output format as
|
||||
sftp_write_nonblock allows us to very easily run benchmarks on
|
||||
SCP vs SFTP uploads using libssh2.
|
||||
|
||||
- sftp_write_nonblock: select() on socket, use *BIG* buffer, time transfer
|
||||
|
||||
The select() is just to make it nicer so that it doesn't
|
||||
crazy-loop on EAGAIN. The buffer size thing is mostly to verify
|
||||
that this really work as supposed.
|
||||
|
||||
Transfer timing is just a minor thing, but it can just as well be
|
||||
there and help us time and work on performance easier using out
|
||||
of the box examples.
|
||||
|
||||
- agent: use _libssh2_error() when returning errors
|
||||
|
||||
As pointed out in bug report #173, this module basically never
|
||||
used _libssh2_error() which made it work inconstently with other
|
||||
parts of the libssh2 code base. This is my first take at making
|
||||
this code more in line with the rest.
|
||||
|
||||
- inputchecks: make lots of API functions check for NULL pointers
|
||||
|
||||
If an application accidentally provides a NULL handle pointer to
|
||||
the channel or sftp public functions, they now return an error
|
||||
instead of segfaulting.
|
||||
|
||||
- libssh2_channel_eof: clarify that it returns negative on errors
|
||||
|
||||
- SFTP: keep the sftp error code as 32 bit
|
||||
|
||||
'last_errno' holds to the error code from the SFTP protocol and
|
||||
since that is 32 bits on the wire there's no point in using a
|
||||
long for this internally which is larger on some platforms.
|
||||
|
||||
- agent: make the code better deal with unexpected code flows
|
||||
|
||||
agent->ops gets initialized by the libssh2_agent_connect() call
|
||||
but we need to make sure that we don't segfault even if a bad
|
||||
sequence of function calls is used.
|
||||
|
||||
Alexander Lamaison (10 Jun 2010)
|
||||
- Better handling of invalid key files.
|
||||
|
||||
Passing an invalid public key to libssh2_userauth_publickey_fromfile_ex
|
||||
triggered an assertion. Replaced this with a runtime check that rejects
|
||||
obviously invalid key data.
|
||||
|
||||
Daniel Stenberg (10 Jun 2010)
|
||||
- version: we start working on 1.2.7 now
|
||||
|
||||
Version 1.2.6 (10 Jun 2010)
|
||||
|
||||
Daniel Stenberg (10 Jun 2010)
|
||||
- NEWS: add the 1.2.6 release details
|
||||
|
||||
- RELEASE-NOTES: 1.2.6 details added
|
||||
|
||||
Guenter Knauf (10 Jun 2010)
|
||||
- fixed libssh2.dsw to use the generated libssh2.dsp; removed old *.dsp files.
|
||||
|
||||
- moved MSVC strdup define to libssh2_config.h which we include already.
|
||||
|
||||
- added missing source files to src/NMakefile.
|
||||
|
||||
Daniel Stenberg (8 Jun 2010)
|
||||
- libssh2_poll: refer to poll(3) and select(3) instead
|
||||
|
||||
- example: fix strdup() for MSVC compiles
|
||||
|
||||
MSVC has a _strdup() that we better use. This was reported in bug
|
||||
|
||||
- SFTP: fail init SFTP if session isn't authenticated
|
||||
|
||||
Alexander Lamaison filed bug #172
|
||||
(http://trac.libssh2.org/ticket/172), and pointed out that SFTP
|
||||
init would do bad if the session isn't yet authenticated at the
|
||||
time of the call, so we now check for this situation and returns
|
||||
an error if detected. Calling sftp_init() at this point is bad
|
||||
usage to start with.
|
||||
|
||||
- direct_tcpip: bring back inclusion of libssh2_config.h
|
||||
|
||||
In order to increase portability of this example, I'm bringing
|
||||
the inclusion of libssh2_config.h back, and I also added an
|
||||
require that header for this example to compile.
|
||||
|
||||
I also made all code lines fit within 80 columns.
|
||||
|
||||
Guenter Knauf (3 Jun 2010)
|
||||
- cast away a warning.
|
||||
|
||||
- moved CRT_SECURE_NO_DEPRECATE define up so its defined before the winsock headers are included.
|
||||
|
||||
- fixed platform detection for MingW32 test makefile.
|
||||
|
||||
- MingW32 has gettimeofday() implemented, so proper ifdef this function here.
|
||||
|
||||
- removed MSVC ifdef since seems we can use __int64 still with latest headers.
|
||||
|
|
|
|||
|
|
@ -1,44 +1,62 @@
|
|||
libssh2 1.9.0
|
||||
libssh2 1.10
|
||||
|
||||
This release includes the following enhancements and bugfixes:
|
||||
|
||||
o adds ECDSA keys and host key support when using OpenSSL
|
||||
o adds ED25519 key and host key support when using OpenSSL 1.1.1
|
||||
o adds OpenSSH style key file reading
|
||||
o adds AES CTR mode support when using WinCNG
|
||||
o adds PEM passphrase protected file support for Libgcrypt and WinCNG
|
||||
o adds SHA256 hostkey fingerprint
|
||||
o adds libssh2_agent_get_identity_path() and libssh2_agent_set_identity_path()
|
||||
o adds explicit zeroing of sensitive data in memory
|
||||
o adds additional bounds checks to network buffer reads
|
||||
o adds the ability to use the server default permissions when creating sftp directories
|
||||
o adds support for building with OpenSSL no engine flag
|
||||
o adds support for building with LibreSSL
|
||||
o increased sftp packet size to 256k
|
||||
o fixed oversized packet handling in sftp
|
||||
o fixed building with OpenSSL 1.1
|
||||
o fixed a possible crash if sftp stat gets an unexpected response
|
||||
o fixed incorrect parsing of the KEX preference string value
|
||||
o fixed conditional RSA and AES-CTR support
|
||||
o fixed a small memory leak during the key exchange process
|
||||
o fixed a possible memory leak of the ssh banner string
|
||||
o fixed various small memory leaks in the backends
|
||||
o fixed possible out of bounds read when parsing public keys from the server
|
||||
o fixed possible out of bounds read when parsing invalid PEM files
|
||||
o no longer null terminates the scp remote exec command
|
||||
o now handle errors when diffie hellman key pair generation fails
|
||||
o fixed compiling on Windows with the flag STDCALL=ON
|
||||
o improved building instructions
|
||||
|
||||
o adds agent forwarding support
|
||||
o adds OpenSSH Agent support on Windows
|
||||
o adds ECDSA key support using the Mbed TLS backend
|
||||
o adds ECDSA cert authentication
|
||||
o adds diffie-hellman-group14-sha256, diffie-hellman-group16-sha512,
|
||||
diffie-hellman-group18-sha512 key exchanges
|
||||
o adds support for PKIX key reading when using ed25519 with OpenSSL
|
||||
o adds support for EWOULDBLOCK on VMS systems
|
||||
o adds support for building with OpenSSL 3
|
||||
o adds support for using FIPS mode in OpenSSL
|
||||
o adds debug symbols when building with MSVC
|
||||
o adds support for building on the 3DS
|
||||
o adds unicode build support on Windows
|
||||
o restores os400 building
|
||||
o increases min, max and opt Diffie Hellman group values
|
||||
o improves portiablity of the make file
|
||||
o improves timeout behavior with 2FA keyboard auth
|
||||
o various improvements to the Wincng backend
|
||||
o fixes reading parital packet replies when using an agent
|
||||
o fixes Diffie Hellman key exchange on Windows 1903+ builds
|
||||
o fixes building tests with older versions of OpenSSL
|
||||
o fixes possible multiple definition warnings
|
||||
o fixes potential cast issues _libssh2_ecdsa_key_get_curve_type()
|
||||
o fixes potential use after free if libssh2_init() is called twice
|
||||
o improved linking when using Mbed TLS
|
||||
o fixes call to libssh2_crypto_exit() if crypto hasn't been initialized
|
||||
o fixes crash when loading public keys with no id
|
||||
o fixes possible out of bounds read when exchanging keys
|
||||
o fixes possible out of bounds read when reading packets
|
||||
o fixes possible out of bounds read when opening an X11 connection
|
||||
o fixes possible out of bounds read when ecdh host keys
|
||||
o fixes possible hang when trying to read a disconnected socket
|
||||
o fixes a crash when using the delayed compression option
|
||||
o fixes read error with large known host entries
|
||||
o fixes various warnings
|
||||
o fixes various small memory leaks
|
||||
o improved error handling, various detailed errors will now be reported
|
||||
o builds are now using OSS-Fuzz
|
||||
o builds now use autoreconf instead of a custom build script
|
||||
o cmake now respects install directory
|
||||
o improved CI backend
|
||||
o updated HACKING-CRYPTO documentation
|
||||
o use markdown file extensions
|
||||
o improved unit tests
|
||||
|
||||
|
||||
This release would not have looked like this without help, code, reports and
|
||||
advice from friends like these:
|
||||
|
||||
Peter Surge, Will Cosgrove, Daniel Stenberg, Alex Arslan, Alex Crichton,
|
||||
Thomas Bleeker, Keno Fischer, Marc Hörsken, Marcel Raad, Viktor Szakats,
|
||||
Kamil Dudka, Panos, Etienne Samson, Tseng Jun, Brendan Shanks, doublex,
|
||||
Erik B, Jakob Egger, Thomas Lochmatter, alex-weaver, Adrian Moran, Zenju,
|
||||
gartens, Matthew D. Fuller, Ryan Kelley, Zhen-Huan HWANG, Orivej Desh,
|
||||
Alexander Curtiss
|
||||
|
||||
(29 contributors)
|
||||
katzer, Orgad Shaneh, mark-i-m, Zenju, axjowa, Thilo Schulz,
|
||||
Etienne Samson, hlefebvre, seba30, Panos, jethrogb, Fabrice Fontaine,
|
||||
Will Cosgrove, Daniel Stenberg, Michael Buckley, Wallace Souza Silva,
|
||||
Romain-Geissler-1A, meierha, Tseng Jun, Thomas Klausner, Brendan Shanks,
|
||||
Harry Sintonen, monnerat, Koutheir Attouchi, Marc Hörsken, yann-morin-1998,
|
||||
Wez Furlong, TDi-jonesds, David Benjamin, Max Dymond, Igor Klevanets,
|
||||
Viktor Szakats, Laurent Stacul, Mstrodl, Gabriel Smith, MarcT512,
|
||||
Paul Capron, teottin, Tor Erik Ottinsen, Brian Inglis
|
||||
|
||||
(40 contributors)
|
||||
|
|
|
|||
|
|
@ -38,6 +38,7 @@
|
|||
*/
|
||||
|
||||
#include "libssh2_priv.h"
|
||||
#include "agent.h"
|
||||
#include "misc.h"
|
||||
#include <errno.h>
|
||||
#ifdef HAVE_SYS_UN_H
|
||||
|
|
@ -50,6 +51,9 @@
|
|||
#endif
|
||||
#include "userauth.h"
|
||||
#include "session.h"
|
||||
#ifdef WIN32
|
||||
#include <stdlib.h>
|
||||
#endif
|
||||
|
||||
/* Requests from client to agent for protocol 1 key operations */
|
||||
#define SSH_AGENTC_REQUEST_RSA_IDENTITIES 1
|
||||
|
|
@ -90,58 +94,6 @@
|
|||
#define SSH_AGENT_CONSTRAIN_LIFETIME 1
|
||||
#define SSH_AGENT_CONSTRAIN_CONFIRM 2
|
||||
|
||||
/* non-blocking mode on agent connection is not yet implemented, but
|
||||
for future use. */
|
||||
typedef enum {
|
||||
agent_NB_state_init = 0,
|
||||
agent_NB_state_request_created,
|
||||
agent_NB_state_request_length_sent,
|
||||
agent_NB_state_request_sent,
|
||||
agent_NB_state_response_length_received,
|
||||
agent_NB_state_response_received
|
||||
} agent_nonblocking_states;
|
||||
|
||||
typedef struct agent_transaction_ctx {
|
||||
unsigned char *request;
|
||||
size_t request_len;
|
||||
unsigned char *response;
|
||||
size_t response_len;
|
||||
agent_nonblocking_states state;
|
||||
} *agent_transaction_ctx_t;
|
||||
|
||||
typedef int (*agent_connect_func)(LIBSSH2_AGENT *agent);
|
||||
typedef int (*agent_transact_func)(LIBSSH2_AGENT *agent,
|
||||
agent_transaction_ctx_t transctx);
|
||||
typedef int (*agent_disconnect_func)(LIBSSH2_AGENT *agent);
|
||||
|
||||
struct agent_publickey {
|
||||
struct list_node node;
|
||||
|
||||
/* this is the struct we expose externally */
|
||||
struct libssh2_agent_publickey external;
|
||||
};
|
||||
|
||||
struct agent_ops {
|
||||
agent_connect_func connect;
|
||||
agent_transact_func transact;
|
||||
agent_disconnect_func disconnect;
|
||||
};
|
||||
|
||||
struct _LIBSSH2_AGENT
|
||||
{
|
||||
LIBSSH2_SESSION *session; /* the session this "belongs to" */
|
||||
|
||||
libssh2_socket_t fd;
|
||||
|
||||
struct agent_ops *ops;
|
||||
|
||||
struct agent_transaction_ctx transctx;
|
||||
struct agent_publickey *identity;
|
||||
struct list_head head; /* list of public keys */
|
||||
|
||||
char *identity_agent_path; /* Path to a custom identity agent socket */
|
||||
};
|
||||
|
||||
#ifdef PF_UNIX
|
||||
static int
|
||||
agent_connect_unix(LIBSSH2_AGENT *agent)
|
||||
|
|
@ -404,6 +356,7 @@ static struct {
|
|||
} supported_backends[] = {
|
||||
#ifdef WIN32
|
||||
{"Pageant", &agent_ops_pageant},
|
||||
{"OpenSSH", &agent_ops_openssh},
|
||||
#endif /* WIN32 */
|
||||
#ifdef PF_UNIX
|
||||
{"Unix", &agent_ops_unix},
|
||||
|
|
@ -441,6 +394,7 @@ agent_sign(LIBSSH2_SESSION *session, unsigned char **sig, size_t *sig_len,
|
|||
_libssh2_store_u32(&s, 0);
|
||||
|
||||
transctx->request_len = s - transctx->request;
|
||||
transctx->send_recv_total = 0;
|
||||
transctx->state = agent_NB_state_request_created;
|
||||
}
|
||||
|
||||
|
|
@ -541,6 +495,7 @@ agent_list_identities(LIBSSH2_AGENT *agent)
|
|||
if(transctx->state == agent_NB_state_init) {
|
||||
transctx->request = &c;
|
||||
transctx->request_len = 1;
|
||||
transctx->send_recv_total = 0;
|
||||
transctx->state = agent_NB_state_request_created;
|
||||
}
|
||||
|
||||
|
|
@ -717,6 +672,12 @@ libssh2_agent_init(LIBSSH2_SESSION *session)
|
|||
agent->identity_agent_path = NULL;
|
||||
_libssh2_list_init(&agent->head);
|
||||
|
||||
#ifdef WIN32
|
||||
agent->pipe = INVALID_HANDLE_VALUE;
|
||||
memset(&agent->overlapped, 0, sizeof(OVERLAPPED));
|
||||
agent->pending_io = FALSE;
|
||||
#endif
|
||||
|
||||
return agent;
|
||||
}
|
||||
|
||||
|
|
|
|||
112
uppsrc/Core/SSH/libssh2/agent.h
Normal file
112
uppsrc/Core/SSH/libssh2/agent.h
Normal file
|
|
@ -0,0 +1,112 @@
|
|||
#ifndef __LIBSSH2_AGENT_H
|
||||
#define __LIBSSH2_AGENT_H
|
||||
/*
|
||||
* Copyright (c) 2009 by Daiki Ueno
|
||||
* Copyright (C) 2010-2014 by Daniel Stenberg
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms,
|
||||
* with or without modification, are permitted provided
|
||||
* that the following conditions are met:
|
||||
*
|
||||
* Redistributions of source code must retain the above
|
||||
* copyright notice, this list of conditions and the
|
||||
* following disclaimer.
|
||||
*
|
||||
* Redistributions in binary form must reproduce the above
|
||||
* copyright notice, this list of conditions and the following
|
||||
* disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
*
|
||||
* Neither the name of the copyright holder nor the names
|
||||
* of any other contributors may be used to endorse or
|
||||
* promote products derived from this software without
|
||||
* specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
|
||||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
||||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
|
||||
* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include "libssh2_priv.h"
|
||||
#include "misc.h"
|
||||
#include "session.h"
|
||||
#ifdef WIN32
|
||||
#include <stdlib.h>
|
||||
#endif
|
||||
|
||||
/* non-blocking mode on agent connection is not yet implemented, but
|
||||
for future use. */
|
||||
typedef enum {
|
||||
agent_NB_state_init = 0,
|
||||
agent_NB_state_request_created,
|
||||
agent_NB_state_request_length_sent,
|
||||
agent_NB_state_request_sent,
|
||||
agent_NB_state_response_length_received,
|
||||
agent_NB_state_response_received
|
||||
} agent_nonblocking_states;
|
||||
|
||||
typedef struct agent_transaction_ctx {
|
||||
unsigned char *request;
|
||||
size_t request_len;
|
||||
unsigned char *response;
|
||||
size_t response_len;
|
||||
agent_nonblocking_states state;
|
||||
size_t send_recv_total;
|
||||
} *agent_transaction_ctx_t;
|
||||
|
||||
typedef int (*agent_connect_func)(LIBSSH2_AGENT *agent);
|
||||
typedef int (*agent_transact_func)(LIBSSH2_AGENT *agent,
|
||||
agent_transaction_ctx_t transctx);
|
||||
typedef int (*agent_disconnect_func)(LIBSSH2_AGENT *agent);
|
||||
|
||||
struct agent_publickey {
|
||||
struct list_node node;
|
||||
|
||||
/* this is the struct we expose externally */
|
||||
struct libssh2_agent_publickey external;
|
||||
};
|
||||
|
||||
struct agent_ops {
|
||||
agent_connect_func connect;
|
||||
agent_transact_func transact;
|
||||
agent_disconnect_func disconnect;
|
||||
};
|
||||
|
||||
struct _LIBSSH2_AGENT
|
||||
{
|
||||
LIBSSH2_SESSION *session; /* the session this "belongs to" */
|
||||
|
||||
libssh2_socket_t fd;
|
||||
|
||||
struct agent_ops *ops;
|
||||
|
||||
struct agent_transaction_ctx transctx;
|
||||
struct agent_publickey *identity;
|
||||
struct list_head head; /* list of public keys */
|
||||
|
||||
char *identity_agent_path; /* Path to a custom identity agent socket */
|
||||
|
||||
#ifdef WIN32
|
||||
OVERLAPPED overlapped;
|
||||
HANDLE pipe;
|
||||
BOOL pending_io;
|
||||
#endif
|
||||
};
|
||||
|
||||
#ifdef WIN32
|
||||
extern struct agent_ops agent_ops_openssh;
|
||||
#endif
|
||||
|
||||
#endif /* __LIBSSH2_AGENT_H */
|
||||
361
uppsrc/Core/SSH/libssh2/agent_win.c
Normal file
361
uppsrc/Core/SSH/libssh2/agent_win.c
Normal file
|
|
@ -0,0 +1,361 @@
|
|||
/*
|
||||
* Copyright (c) 2009 by Daiki Ueno
|
||||
* Copyright (C) 2010-2014 by Daniel Stenberg
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms,
|
||||
* with or without modification, are permitted provided
|
||||
* that the following conditions are met:
|
||||
*
|
||||
* Redistributions of source code must retain the above
|
||||
* copyright notice, this list of conditions and the
|
||||
* following disclaimer.
|
||||
*
|
||||
* Redistributions in binary form must reproduce the above
|
||||
* copyright notice, this list of conditions and the following
|
||||
* disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
*
|
||||
* Neither the name of the copyright holder nor the names
|
||||
* of any other contributors may be used to endorse or
|
||||
* promote products derived from this software without
|
||||
* specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
|
||||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
||||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
|
||||
* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include "libssh2_priv.h"
|
||||
#include "agent.h"
|
||||
#include "misc.h"
|
||||
#include <errno.h>
|
||||
#ifdef HAVE_SYS_UN_H
|
||||
#include <sys/un.h>
|
||||
#else
|
||||
/* Use the existence of sys/un.h as a test if Unix domain socket is
|
||||
supported. winsock*.h define PF_UNIX/AF_UNIX but do not actually
|
||||
support them. */
|
||||
#undef PF_UNIX
|
||||
#endif
|
||||
#include "userauth.h"
|
||||
#include "session.h"
|
||||
#ifdef WIN32
|
||||
#include <stdlib.h>
|
||||
#endif
|
||||
|
||||
#ifdef WIN32
|
||||
/* Code to talk to OpenSSH was taken and modified from the Win32 port of
|
||||
* Portable OpenSSH by the PowerShell team. Commit
|
||||
* 8ab565c53f3619d6a1f5ac229e212cad8a52852c of
|
||||
* https://github.com/PowerShell/openssh-portable.git was used as the base,
|
||||
* specificaly the following files:
|
||||
*
|
||||
* - contrib\win32\win32compat\fileio.c
|
||||
* - Structure of agent_connect_openssh from ssh_get_authentication_socket
|
||||
* - Structure of agent_transact_openssh from ssh_request_reply
|
||||
* - contrib\win32\win32compat\wmain_common.c
|
||||
* - Windows equivalent functions for common Unix functions, inlined into
|
||||
* this implementation
|
||||
* - fileio_connect replacing connect
|
||||
* - fileio_read replacing read
|
||||
* - fileio_write replacing write
|
||||
* - fileio_close replacing close
|
||||
*
|
||||
* Author: Tatu Ylonen <ylo@cs.hut.fi>
|
||||
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
|
||||
* All rights reserved
|
||||
* Functions for connecting the local authentication agent.
|
||||
*
|
||||
* As far as I am concerned, the code I have written for this software
|
||||
* can be used freely for any purpose. Any derived versions of this
|
||||
* software must be clearly marked as such, and if the derived work is
|
||||
* incompatible with the protocol description in the RFC file, it must be
|
||||
* called by a name other than "ssh" or "Secure Shell".
|
||||
*
|
||||
* SSH2 implementation,
|
||||
* Copyright (c) 2000 Markus Friedl. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* Copyright (c) 2015 Microsoft Corp.
|
||||
* All rights reserved
|
||||
*
|
||||
* Microsoft openssh win32 port
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#define WIN32_OPENSSH_AGENT_SOCK "\\\\.\\pipe\\openssh-ssh-agent"
|
||||
|
||||
static int
|
||||
agent_connect_openssh(LIBSSH2_AGENT *agent)
|
||||
{
|
||||
int ret = LIBSSH2_ERROR_NONE;
|
||||
const char *path;
|
||||
HANDLE pipe = INVALID_HANDLE_VALUE;
|
||||
HANDLE event = NULL;
|
||||
|
||||
path = agent->identity_agent_path;
|
||||
if(!path) {
|
||||
path = getenv("SSH_AUTH_SOCK");
|
||||
if(!path)
|
||||
path = WIN32_OPENSSH_AGENT_SOCK;
|
||||
}
|
||||
|
||||
for(;;) {
|
||||
pipe = CreateFileA(
|
||||
path,
|
||||
GENERIC_READ | GENERIC_WRITE,
|
||||
0,
|
||||
NULL,
|
||||
OPEN_EXISTING,
|
||||
/* Non-blocking mode for agent connections is not implemented at
|
||||
* the point this was implemented. The code for Win32 OpenSSH
|
||||
* should support non-blocking IO, but the code calling it doesn't
|
||||
* support it as of yet.
|
||||
* When non-blocking IO is implemented for the surrounding code,
|
||||
* uncomment the following line to enable support within the Win32
|
||||
* OpenSSH code.
|
||||
*/
|
||||
/* FILE_FLAG_OVERLAPPED | */
|
||||
SECURITY_SQOS_PRESENT |
|
||||
SECURITY_IDENTIFICATION,
|
||||
NULL
|
||||
);
|
||||
|
||||
if(pipe != INVALID_HANDLE_VALUE)
|
||||
break;
|
||||
if(GetLastError() != ERROR_PIPE_BUSY)
|
||||
break;
|
||||
|
||||
/* Wait up to 1 second for a pipe instance to become available */
|
||||
if(!WaitNamedPipeA(path, 1000))
|
||||
break;
|
||||
}
|
||||
|
||||
if(pipe == INVALID_HANDLE_VALUE) {
|
||||
ret = _libssh2_error(agent->session, LIBSSH2_ERROR_AGENT_PROTOCOL,
|
||||
"unable to connect to agent pipe");
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if(SetHandleInformation(pipe, HANDLE_FLAG_INHERIT, 0) == FALSE) {
|
||||
ret = _libssh2_error(agent->session, LIBSSH2_ERROR_AGENT_PROTOCOL,
|
||||
"unable to set handle information of agent pipe");
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
event = CreateEventA(NULL, TRUE, FALSE, NULL);
|
||||
if(event == NULL) {
|
||||
ret = _libssh2_error(agent->session, LIBSSH2_ERROR_AGENT_PROTOCOL,
|
||||
"unable to create async I/O event");
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
agent->pipe = pipe;
|
||||
pipe = INVALID_HANDLE_VALUE;
|
||||
agent->overlapped.hEvent = event;
|
||||
event = NULL;
|
||||
agent->fd = 0; /* Mark as the connection has been established */
|
||||
|
||||
cleanup:
|
||||
if(event != NULL)
|
||||
CloseHandle(event);
|
||||
if(pipe != INVALID_HANDLE_VALUE)
|
||||
CloseHandle(pipe);
|
||||
return ret;
|
||||
}
|
||||
|
||||
#define RECV_SEND_ALL(func, agent, buffer, length, total) \
|
||||
DWORD bytes_transfered; \
|
||||
BOOL ret; \
|
||||
DWORD err; \
|
||||
int rc; \
|
||||
\
|
||||
while(*total < length) { \
|
||||
if(!agent->pending_io) \
|
||||
ret = func(agent->pipe, (char *)buffer + *total, \
|
||||
(DWORD)(length - *total), &bytes_transfered, \
|
||||
&agent->overlapped); \
|
||||
else \
|
||||
ret = GetOverlappedResult(agent->pipe, &agent->overlapped, \
|
||||
&bytes_transfered, FALSE); \
|
||||
\
|
||||
*total += bytes_transfered; \
|
||||
if(!ret) { \
|
||||
err = GetLastError(); \
|
||||
if((!agent->pending_io && ERROR_IO_PENDING == err) \
|
||||
|| (agent->pending_io && ERROR_IO_INCOMPLETE == err)) { \
|
||||
agent->pending_io = TRUE; \
|
||||
return LIBSSH2_ERROR_EAGAIN; \
|
||||
} \
|
||||
\
|
||||
return LIBSSH2_ERROR_SOCKET_NONE; \
|
||||
} \
|
||||
agent->pending_io = FALSE; \
|
||||
} \
|
||||
\
|
||||
rc = (int)*total; \
|
||||
*total = 0; \
|
||||
return rc;
|
||||
|
||||
static int
|
||||
win32_openssh_send_all(LIBSSH2_AGENT *agent, void *buffer, size_t length,
|
||||
size_t *send_recv_total)
|
||||
{
|
||||
RECV_SEND_ALL(WriteFile, agent, buffer, length, send_recv_total)
|
||||
}
|
||||
|
||||
static int
|
||||
win32_openssh_recv_all(LIBSSH2_AGENT *agent, void *buffer, size_t length,
|
||||
size_t *send_recv_total)
|
||||
{
|
||||
RECV_SEND_ALL(ReadFile, agent, buffer, length, send_recv_total)
|
||||
}
|
||||
|
||||
#undef RECV_SEND_ALL
|
||||
|
||||
static int
|
||||
agent_transact_openssh(LIBSSH2_AGENT *agent, agent_transaction_ctx_t transctx)
|
||||
{
|
||||
unsigned char buf[4];
|
||||
int rc;
|
||||
|
||||
/* Send the length of the request */
|
||||
if(transctx->state == agent_NB_state_request_created) {
|
||||
_libssh2_htonu32(buf, (uint32_t)transctx->request_len);
|
||||
rc = win32_openssh_send_all(agent, buf, sizeof buf,
|
||||
&transctx->send_recv_total);
|
||||
if(rc == LIBSSH2_ERROR_EAGAIN)
|
||||
return LIBSSH2_ERROR_EAGAIN;
|
||||
else if(rc < 0)
|
||||
return _libssh2_error(agent->session, LIBSSH2_ERROR_SOCKET_SEND,
|
||||
"agent send failed");
|
||||
transctx->state = agent_NB_state_request_length_sent;
|
||||
}
|
||||
|
||||
/* Send the request body */
|
||||
if(transctx->state == agent_NB_state_request_length_sent) {
|
||||
rc = win32_openssh_send_all(agent, transctx->request,
|
||||
transctx->request_len,
|
||||
&transctx->send_recv_total);
|
||||
if(rc == LIBSSH2_ERROR_EAGAIN)
|
||||
return LIBSSH2_ERROR_EAGAIN;
|
||||
else if(rc < 0)
|
||||
return _libssh2_error(agent->session, LIBSSH2_ERROR_SOCKET_SEND,
|
||||
"agent send failed");
|
||||
transctx->state = agent_NB_state_request_sent;
|
||||
}
|
||||
|
||||
/* Receive the length of the body */
|
||||
if(transctx->state == agent_NB_state_request_sent) {
|
||||
rc = win32_openssh_recv_all(agent, buf, sizeof buf,
|
||||
&transctx->send_recv_total);
|
||||
if(rc == LIBSSH2_ERROR_EAGAIN)
|
||||
return LIBSSH2_ERROR_EAGAIN;
|
||||
else if(rc < 0)
|
||||
return _libssh2_error(agent->session, LIBSSH2_ERROR_SOCKET_RECV,
|
||||
"agent recv failed");
|
||||
|
||||
transctx->response_len = _libssh2_ntohu32(buf);
|
||||
transctx->response = LIBSSH2_ALLOC(agent->session,
|
||||
transctx->response_len);
|
||||
if(!transctx->response)
|
||||
return LIBSSH2_ERROR_ALLOC;
|
||||
|
||||
transctx->state = agent_NB_state_response_length_received;
|
||||
}
|
||||
|
||||
/* Receive the response body */
|
||||
if(transctx->state == agent_NB_state_response_length_received) {
|
||||
rc = win32_openssh_recv_all(agent, transctx->response,
|
||||
transctx->response_len,
|
||||
&transctx->send_recv_total);
|
||||
if(rc == LIBSSH2_ERROR_EAGAIN)
|
||||
return LIBSSH2_ERROR_EAGAIN;
|
||||
else if(rc < 0)
|
||||
return _libssh2_error(agent->session, LIBSSH2_ERROR_SOCKET_RECV,
|
||||
"agent recv failed");
|
||||
transctx->state = agent_NB_state_response_received;
|
||||
}
|
||||
|
||||
return LIBSSH2_ERROR_NONE;
|
||||
}
|
||||
|
||||
static int
|
||||
agent_disconnect_openssh(LIBSSH2_AGENT *agent)
|
||||
{
|
||||
if(!CancelIo(agent->pipe))
|
||||
return _libssh2_error(agent->session, LIBSSH2_ERROR_SOCKET_DISCONNECT,
|
||||
"failed to cancel pending IO of agent pipe");
|
||||
if(!CloseHandle(agent->overlapped.hEvent))
|
||||
return _libssh2_error(agent->session, LIBSSH2_ERROR_SOCKET_DISCONNECT,
|
||||
"failed to close handle to async I/O event");
|
||||
agent->overlapped.hEvent = NULL;
|
||||
/* let queued APCs (if any) drain */
|
||||
SleepEx(0, TRUE);
|
||||
if(!CloseHandle(agent->pipe))
|
||||
return _libssh2_error(agent->session, LIBSSH2_ERROR_SOCKET_DISCONNECT,
|
||||
"failed to close handle to agent pipe");
|
||||
|
||||
agent->pipe = INVALID_HANDLE_VALUE;
|
||||
agent->fd = LIBSSH2_INVALID_SOCKET;
|
||||
|
||||
return LIBSSH2_ERROR_NONE;
|
||||
}
|
||||
|
||||
struct agent_ops agent_ops_openssh = {
|
||||
agent_connect_openssh,
|
||||
agent_transact_openssh,
|
||||
agent_disconnect_openssh
|
||||
};
|
||||
#endif /* WIN32 */
|
||||
|
|
@ -81,7 +81,7 @@ bcrypt_hash(uint8_t *sha2pass, uint8_t *sha2salt, uint8_t *out)
|
|||
cdata[i] = Blowfish_stream2word(ciphertext, sizeof(ciphertext),
|
||||
&j);
|
||||
for(i = 0; i < 64; i++)
|
||||
blf_enc(&state, cdata, sizeof(cdata) / (sizeof(uint64_t)));
|
||||
blf_enc(&state, cdata, BCRYPT_BLOCKS / 2);
|
||||
|
||||
/* copy out */
|
||||
for(i = 0; i < BCRYPT_BLOCKS; i++) {
|
||||
|
|
|
|||
|
|
@ -1338,7 +1338,11 @@ channel_x11_req(LIBSSH2_CHANNEL *channel, int single_connection,
|
|||
border */
|
||||
unsigned char buffer[(LIBSSH2_X11_RANDOM_COOKIE_LEN / 2) + 1];
|
||||
|
||||
_libssh2_random(buffer, LIBSSH2_X11_RANDOM_COOKIE_LEN / 2);
|
||||
if(_libssh2_random(buffer, LIBSSH2_X11_RANDOM_COOKIE_LEN / 2)) {
|
||||
return _libssh2_error(session, LIBSSH2_ERROR_RANDGEN,
|
||||
"Unable to get random bytes "
|
||||
"for x11-req cookie");
|
||||
}
|
||||
for(i = 0; i < (LIBSSH2_X11_RANDOM_COOKIE_LEN / 2); i++) {
|
||||
snprintf((char *)&s[i*2], 3, "%02X", buffer[i]);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -783,6 +783,42 @@ static const LIBSSH2_HOSTKEY_METHOD hostkey_method_ecdsa_ssh_nistp521 = {
|
|||
hostkey_method_ssh_ecdsa_dtor,
|
||||
};
|
||||
|
||||
static const LIBSSH2_HOSTKEY_METHOD hostkey_method_ecdsa_ssh_nistp256_cert = {
|
||||
"ecdsa-sha2-nistp256-cert-v01@openssh.com",
|
||||
SHA256_DIGEST_LENGTH,
|
||||
NULL,
|
||||
hostkey_method_ssh_ecdsa_initPEM,
|
||||
hostkey_method_ssh_ecdsa_initPEMFromMemory,
|
||||
NULL,
|
||||
hostkey_method_ssh_ecdsa_signv,
|
||||
NULL, /* encrypt */
|
||||
hostkey_method_ssh_ecdsa_dtor,
|
||||
};
|
||||
|
||||
static const LIBSSH2_HOSTKEY_METHOD hostkey_method_ecdsa_ssh_nistp384_cert = {
|
||||
"ecdsa-sha2-nistp384-cert-v01@openssh.com",
|
||||
SHA384_DIGEST_LENGTH,
|
||||
NULL,
|
||||
hostkey_method_ssh_ecdsa_initPEM,
|
||||
hostkey_method_ssh_ecdsa_initPEMFromMemory,
|
||||
NULL,
|
||||
hostkey_method_ssh_ecdsa_signv,
|
||||
NULL, /* encrypt */
|
||||
hostkey_method_ssh_ecdsa_dtor,
|
||||
};
|
||||
|
||||
static const LIBSSH2_HOSTKEY_METHOD hostkey_method_ecdsa_ssh_nistp521_cert = {
|
||||
"ecdsa-sha2-nistp521-cert-v01@openssh.com",
|
||||
SHA512_DIGEST_LENGTH,
|
||||
NULL,
|
||||
hostkey_method_ssh_ecdsa_initPEM,
|
||||
hostkey_method_ssh_ecdsa_initPEMFromMemory,
|
||||
NULL,
|
||||
hostkey_method_ssh_ecdsa_signv,
|
||||
NULL, /* encrypt */
|
||||
hostkey_method_ssh_ecdsa_dtor,
|
||||
};
|
||||
|
||||
#endif /* LIBSSH2_ECDSA */
|
||||
|
||||
#if LIBSSH2_ED25519
|
||||
|
|
@ -999,6 +1035,9 @@ static const LIBSSH2_HOSTKEY_METHOD *hostkey_methods[] = {
|
|||
&hostkey_method_ecdsa_ssh_nistp256,
|
||||
&hostkey_method_ecdsa_ssh_nistp384,
|
||||
&hostkey_method_ecdsa_ssh_nistp521,
|
||||
&hostkey_method_ecdsa_ssh_nistp256_cert,
|
||||
&hostkey_method_ecdsa_ssh_nistp384_cert,
|
||||
&hostkey_method_ecdsa_ssh_nistp521_cert,
|
||||
#endif
|
||||
#if LIBSSH2_ED25519
|
||||
&hostkey_method_ssh_ed25519,
|
||||
|
|
|
|||
|
|
@ -1579,39 +1579,6 @@ kex_method_diffie_hellman_group_exchange_sha256_key_exchange
|
|||
}
|
||||
|
||||
|
||||
#if LIBSSH2_ECDSA
|
||||
|
||||
/* kex_session_ecdh_curve_type
|
||||
* returns the EC curve type by name used in key exchange
|
||||
*/
|
||||
|
||||
static int
|
||||
kex_session_ecdh_curve_type(const char *name, libssh2_curve_type *out_type)
|
||||
{
|
||||
int ret = 0;
|
||||
libssh2_curve_type type;
|
||||
|
||||
if(name == NULL)
|
||||
return -1;
|
||||
|
||||
if(strcmp(name, "ecdh-sha2-nistp256") == 0)
|
||||
type = LIBSSH2_EC_CURVE_NISTP256;
|
||||
else if(strcmp(name, "ecdh-sha2-nistp384") == 0)
|
||||
type = LIBSSH2_EC_CURVE_NISTP384;
|
||||
else if(strcmp(name, "ecdh-sha2-nistp521") == 0)
|
||||
type = LIBSSH2_EC_CURVE_NISTP521;
|
||||
else {
|
||||
ret = -1;
|
||||
}
|
||||
|
||||
if(ret == 0 && out_type) {
|
||||
*out_type = type;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
/* LIBSSH2_KEX_METHOD_EC_SHA_HASH_CREATE_VERIFY
|
||||
*
|
||||
* Macro that create and verifies EC SHA hash with a given digest bytes
|
||||
|
|
@ -1721,6 +1688,39 @@ kex_session_ecdh_curve_type(const char *name, libssh2_curve_type *out_type)
|
|||
} \
|
||||
|
||||
|
||||
#if LIBSSH2_ECDSA
|
||||
|
||||
/* kex_session_ecdh_curve_type
|
||||
* returns the EC curve type by name used in key exchange
|
||||
*/
|
||||
|
||||
static int
|
||||
kex_session_ecdh_curve_type(const char *name, libssh2_curve_type *out_type)
|
||||
{
|
||||
int ret = 0;
|
||||
libssh2_curve_type type;
|
||||
|
||||
if(name == NULL)
|
||||
return -1;
|
||||
|
||||
if(strcmp(name, "ecdh-sha2-nistp256") == 0)
|
||||
type = LIBSSH2_EC_CURVE_NISTP256;
|
||||
else if(strcmp(name, "ecdh-sha2-nistp384") == 0)
|
||||
type = LIBSSH2_EC_CURVE_NISTP384;
|
||||
else if(strcmp(name, "ecdh-sha2-nistp521") == 0)
|
||||
type = LIBSSH2_EC_CURVE_NISTP521;
|
||||
else {
|
||||
ret = -1;
|
||||
}
|
||||
|
||||
if(ret == 0 && out_type) {
|
||||
*out_type = type;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
/* ecdh_sha2_nistp
|
||||
* Elliptic Curve Diffie Hellman Key Exchange
|
||||
*/
|
||||
|
|
@ -1752,26 +1752,24 @@ static int ecdh_sha2_nistp(LIBSSH2_SESSION *session, libssh2_curve_type type,
|
|||
/* parse INIT reply data */
|
||||
|
||||
/* host key K_S */
|
||||
unsigned char *s = data + 1; /* Advance past packet type */
|
||||
unsigned char *server_public_key;
|
||||
size_t server_public_key_len;
|
||||
size_t host_sig_len;
|
||||
struct string_buf buf;
|
||||
|
||||
session->server_hostkey_len =
|
||||
_libssh2_ntohu32((const unsigned char *)s);
|
||||
s += 4;
|
||||
buf.data = data;
|
||||
buf.len = data_len;
|
||||
buf.dataptr = buf.data;
|
||||
buf.dataptr++; /* Advance past packet type */
|
||||
|
||||
session->server_hostkey = LIBSSH2_ALLOC(session,
|
||||
session->server_hostkey_len);
|
||||
if(!session->server_hostkey) {
|
||||
ret = _libssh2_error(session, LIBSSH2_ERROR_ALLOC,
|
||||
"Unable to allocate memory for a copy "
|
||||
"of the host key");
|
||||
if(_libssh2_copy_string(session, &buf, &(session->server_hostkey),
|
||||
&server_public_key_len)) {
|
||||
ret = _libssh2_error(session, LIBSSH2_ERROR_ALLOC,
|
||||
"Unable to allocate memory for a copy "
|
||||
"of the host key");
|
||||
goto clean_exit;
|
||||
}
|
||||
|
||||
memcpy(session->server_hostkey, s, session->server_hostkey_len);
|
||||
s += session->server_hostkey_len;
|
||||
session->server_hostkey_len = (uint32_t)server_public_key_len;
|
||||
|
||||
#if LIBSSH2_MD5
|
||||
{
|
||||
|
|
@ -1870,19 +1868,20 @@ static int ecdh_sha2_nistp(LIBSSH2_SESSION *session, libssh2_curve_type type,
|
|||
}
|
||||
|
||||
/* server public key Q_S */
|
||||
server_public_key_len = _libssh2_ntohu32((const unsigned char *)s);
|
||||
s += 4;
|
||||
|
||||
server_public_key = s;
|
||||
s += server_public_key_len;
|
||||
if(_libssh2_get_string(&buf, &server_public_key,
|
||||
&server_public_key_len)) {
|
||||
ret = _libssh2_error(session, LIBSSH2_ERROR_PROTO,
|
||||
"Unexpected key length");
|
||||
goto clean_exit;
|
||||
}
|
||||
|
||||
/* server signature */
|
||||
host_sig_len = _libssh2_ntohu32((const unsigned char *)s);
|
||||
s += 4;
|
||||
|
||||
exchange_state->h_sig = s;
|
||||
exchange_state->h_sig_len = host_sig_len;
|
||||
s += host_sig_len;
|
||||
if(_libssh2_get_string(&buf, &exchange_state->h_sig,
|
||||
&(exchange_state->h_sig_len))) {
|
||||
ret = _libssh2_error(session, LIBSSH2_ERROR_HOSTKEY_INIT,
|
||||
"Unexpected ecdh server sig length");
|
||||
goto clean_exit;
|
||||
}
|
||||
|
||||
/* Compute the shared secret K */
|
||||
rc = _libssh2_ecdh_gen_k(&exchange_state->k, private_key,
|
||||
|
|
@ -3177,7 +3176,11 @@ static int kexinit(LIBSSH2_SESSION * session)
|
|||
|
||||
*(s++) = SSH_MSG_KEXINIT;
|
||||
|
||||
_libssh2_random(s, 16);
|
||||
if(_libssh2_random(s, 16)) {
|
||||
return _libssh2_error(session, LIBSSH2_ERROR_RANDGEN,
|
||||
"Unable to get random bytes "
|
||||
"for KEXINIT cookie");
|
||||
}
|
||||
s += 16;
|
||||
|
||||
/* Ennumerating through these lists twice is probably (certainly?)
|
||||
|
|
@ -3287,24 +3290,40 @@ kex_agree_instr(unsigned char *haystack, unsigned long haystack_len,
|
|||
const unsigned char *needle, unsigned long needle_len)
|
||||
{
|
||||
unsigned char *s;
|
||||
unsigned char *end_haystack;
|
||||
unsigned long left;
|
||||
|
||||
/* Haystack too short to bother trying */
|
||||
if(haystack_len < needle_len) {
|
||||
if(haystack == NULL || needle == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* Haystack too short to bother trying */
|
||||
if(haystack_len < needle_len || needle_len == 0) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
s = haystack;
|
||||
end_haystack = &haystack[haystack_len];
|
||||
left = end_haystack - s;
|
||||
|
||||
/* Needle at start of haystack */
|
||||
if((strncmp((char *) haystack, (char *) needle, needle_len) == 0) &&
|
||||
(needle_len == haystack_len || haystack[needle_len] == ',')) {
|
||||
return haystack;
|
||||
}
|
||||
|
||||
s = haystack;
|
||||
/* Search until we run out of comas or we run out of haystack,
|
||||
whichever comes first */
|
||||
while((s = (unsigned char *) strchr((char *) s, ','))
|
||||
&& ((haystack_len - (s - haystack)) > needle_len)) {
|
||||
s++;
|
||||
while((s = (unsigned char *) memchr((char *) s, ',', left))) {
|
||||
/* Advance buffer past coma if we can */
|
||||
left = end_haystack - s;
|
||||
if((left >= 1) && (left <= haystack_len) && (left > needle_len)) {
|
||||
s++;
|
||||
}
|
||||
else {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* Needle at X position */
|
||||
if((strncmp((char *) s, (char *) needle, needle_len) == 0) &&
|
||||
(((s - haystack) + needle_len) == haystack_len
|
||||
|
|
@ -4069,7 +4088,7 @@ LIBSSH2_API int libssh2_session_supported_algs(LIBSSH2_SESSION* session,
|
|||
supported algorithms (needed to allocate the proper size of array) and
|
||||
the second time to actually copy the pointers. Typically this function
|
||||
will not be called often (typically at the beginning of a session) and
|
||||
the number of algorithms (i.e. niumber of iterations in one loop) will
|
||||
the number of algorithms (i.e. number of iterations in one loop) will
|
||||
not be high (typically it will not exceed 20) for quite a long time.
|
||||
|
||||
So double looping really shouldn't be an issue and it is definitely a
|
||||
|
|
|
|||
|
|
@ -68,7 +68,7 @@
|
|||
#define EC_MAX_POINT_LEN ((528 * 2 / 8) + 1)
|
||||
|
||||
#define _libssh2_random(buf, len) \
|
||||
(gcry_randomize ((buf), (len), GCRY_STRONG_RANDOM), 1)
|
||||
(gcry_randomize ((buf), (len), GCRY_STRONG_RANDOM), 0)
|
||||
|
||||
#define libssh2_prepare_iovec(vec, len) /* Empty. */
|
||||
|
||||
|
|
|
|||
|
|
@ -46,12 +46,12 @@
|
|||
to make the BANNER define (used by src/session.c) be a valid SSH
|
||||
banner. Release versions have no appended strings and may of course not
|
||||
have dashes either. */
|
||||
#define LIBSSH2_VERSION "1.9.0-20201117"
|
||||
#define LIBSSH2_VERSION "1.10.0"
|
||||
|
||||
/* The numeric version number is also available "in parts" by using these
|
||||
defines: */
|
||||
#define LIBSSH2_VERSION_MAJOR 1
|
||||
#define LIBSSH2_VERSION_MINOR 9
|
||||
#define LIBSSH2_VERSION_MINOR 10
|
||||
#define LIBSSH2_VERSION_PATCH 0
|
||||
|
||||
/* This is the numeric version of the libssh2 version number, meant for easier
|
||||
|
|
@ -69,7 +69,7 @@
|
|||
and it is always a greater number in a more recent release. It makes
|
||||
comparisons with greater than and less than work.
|
||||
*/
|
||||
#define LIBSSH2_VERSION_NUM 0x010900
|
||||
#define LIBSSH2_VERSION_NUM 0x010a00
|
||||
|
||||
/*
|
||||
* This is the date and time when the full source package was created. The
|
||||
|
|
@ -80,7 +80,7 @@
|
|||
*
|
||||
* "Mon Feb 12 11:35:33 UTC 2007"
|
||||
*/
|
||||
#define LIBSSH2_TIMESTAMP "Tue Nov 17 05:06:30 UTC 2020"
|
||||
#define LIBSSH2_TIMESTAMP "Sun 29 Aug 2021 08:37:50 PM UTC"
|
||||
|
||||
#ifndef RC_INVOKED
|
||||
|
||||
|
|
@ -505,6 +505,7 @@ typedef struct _LIBSSH2_POLLFD {
|
|||
#define LIBSSH2_ERROR_KNOWN_HOSTS -46
|
||||
#define LIBSSH2_ERROR_CHANNEL_WINDOW_FULL -47
|
||||
#define LIBSSH2_ERROR_KEYFILE_AUTH_FAILED -48
|
||||
#define LIBSSH2_ERROR_RANDGEN -49
|
||||
|
||||
/* this is a define to provide the old (<= 1.2.7) name */
|
||||
#define LIBSSH2_ERROR_BANNER_NONE LIBSSH2_ERROR_BANNER_RECV
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@
|
|||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
|
||||
* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* USE OF TH☕IS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
|
|
@ -42,9 +42,9 @@
|
|||
#define PACKAGE "Upp::SSH"
|
||||
#define PACKAGE_BUGREPORT "https://github.com/ultimatepp/ultimatepp/issues"
|
||||
#define PACKAGE_NAME "Ultimate++ SSH package"
|
||||
#define PACKAGE_STRING "Ultimate++ SSH package, a libssh2 wrapper, (ver. 2021.1)"
|
||||
#define PACKAGE_STRING "Ultimate++ SSH package, a libssh2 wrapper, (ver. 2022.2)"
|
||||
#define PACKAGE_URL "https://github.com/ultimatepp/ultimatepp"
|
||||
#define PACKAGE_VERSION "2021.1"
|
||||
#define PACKAGE_VERSION "2022.2 (libssh2 v.1.10.0)"
|
||||
|
||||
/* Headers */
|
||||
#define HAVE_INTTYPES_H
|
||||
|
|
|
|||
|
|
@ -3,19 +3,13 @@
|
|||
/* Define if building universal (internal helper macro) */
|
||||
#undef AC_APPLE_UNIVERSAL_BUILD
|
||||
|
||||
/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP
|
||||
systems. This function is required for `alloca.c' support on those systems.
|
||||
*/
|
||||
#undef CRAY_STACKSEG_END
|
||||
|
||||
/* Define to 1 if using `alloca.c'. */
|
||||
/* Define to 1 if using 'alloca.c'. */
|
||||
#undef C_ALLOCA
|
||||
|
||||
/* Define to 1 if you have `alloca', as a function or macro. */
|
||||
/* Define to 1 if you have 'alloca', as a function or macro. */
|
||||
#undef HAVE_ALLOCA
|
||||
|
||||
/* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix).
|
||||
*/
|
||||
/* Define to 1 if <alloca.h> works. */
|
||||
#undef HAVE_ALLOCA_H
|
||||
|
||||
/* Define to 1 if you have the <arpa/inet.h> header file. */
|
||||
|
|
@ -76,9 +70,6 @@
|
|||
/* Define to 1 if the compiler supports the 'long long' data type. */
|
||||
#undef HAVE_LONGLONG
|
||||
|
||||
/* Define to 1 if you have the <memory.h> header file. */
|
||||
#undef HAVE_MEMORY_H
|
||||
|
||||
/* Define to 1 if you have the `memset_s' function. */
|
||||
#undef HAVE_MEMSET_S
|
||||
|
||||
|
|
@ -222,7 +213,9 @@
|
|||
STACK_DIRECTION = 0 => direction of growth unknown */
|
||||
#undef STACK_DIRECTION
|
||||
|
||||
/* Define to 1 if you have the ANSI C header files. */
|
||||
/* Define to 1 if all of the C90 standard headers exist (not just the ones
|
||||
required in a freestanding environment). This macro is provided for
|
||||
backward compatibility; new code need not use it. */
|
||||
#undef STDC_HEADERS
|
||||
|
||||
/* Version number of package */
|
||||
|
|
@ -240,11 +233,6 @@
|
|||
# endif
|
||||
#endif
|
||||
|
||||
/* Enable large inode numbers on Mac OS X 10.5. */
|
||||
#ifndef _DARWIN_USE_64_BIT_INODE
|
||||
# define _DARWIN_USE_64_BIT_INODE 1
|
||||
#endif
|
||||
|
||||
/* Number of bits in a file offset, on hosts where this is settable. */
|
||||
#undef _FILE_OFFSET_BITS
|
||||
|
||||
|
|
|
|||
|
|
@ -109,14 +109,19 @@
|
|||
#define inline __inline
|
||||
#endif
|
||||
|
||||
/* Provide iovec / writev on WIN32 platform. */
|
||||
#ifdef WIN32
|
||||
/* 3DS doesn't seem to have iovec */
|
||||
#if defined(WIN32) || defined(_3DS)
|
||||
|
||||
struct iovec {
|
||||
size_t iov_len;
|
||||
void *iov_base;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
/* Provide iovec / writev on WIN32 platform. */
|
||||
#ifdef WIN32
|
||||
|
||||
static inline int writev(int sock, struct iovec *iov, int nvecs)
|
||||
{
|
||||
DWORD ret;
|
||||
|
|
|
|||
|
|
@ -427,10 +427,19 @@ _libssh2_cipher_crypt(_libssh2_cipher_ctx * ctx,
|
|||
#else
|
||||
ret = EVP_Cipher(ctx, buf, block, blocksize);
|
||||
#endif
|
||||
#if defined(OPENSSL_VERSION_MAJOR) && OPENSSL_VERSION_MAJOR >= 3
|
||||
if(ret != -1) {
|
||||
#else
|
||||
if(ret == 1) {
|
||||
#endif
|
||||
memcpy(block, buf, blocksize);
|
||||
}
|
||||
|
||||
#if defined(OPENSSL_VERSION_MAJOR) && OPENSSL_VERSION_MAJOR >= 3
|
||||
return ret != -1 ? 0 : 1;
|
||||
#else
|
||||
return ret == 1 ? 0 : 1;
|
||||
#endif
|
||||
}
|
||||
|
||||
#if LIBSSH2_AES_CTR && !defined(HAVE_EVP_AES_128_CTR)
|
||||
|
|
@ -1681,6 +1690,8 @@ gen_publickey_from_ed25519_openssh_priv_data(LIBSSH2_SESSION *session,
|
|||
|
||||
method_buf = LIBSSH2_ALLOC(session, 11); /* ssh-ed25519. */
|
||||
if(method_buf == NULL) {
|
||||
_libssh2_error(session, LIBSSH2_ERROR_ALLOC,
|
||||
"Unable to allocate memory for ED25519 key");
|
||||
goto clean_exit;
|
||||
}
|
||||
|
||||
|
|
@ -1689,6 +1700,8 @@ gen_publickey_from_ed25519_openssh_priv_data(LIBSSH2_SESSION *session,
|
|||
key_len = LIBSSH2_ED25519_KEY_LEN + 19;
|
||||
key = LIBSSH2_CALLOC(session, key_len);
|
||||
if(key == NULL) {
|
||||
_libssh2_error(session, LIBSSH2_ERROR_ALLOC,
|
||||
"Unable to allocate memory for ED25519 key");
|
||||
goto clean_exit;
|
||||
}
|
||||
|
||||
|
|
@ -2212,6 +2225,19 @@ _libssh2_sha512(const unsigned char *message, unsigned long len,
|
|||
int
|
||||
_libssh2_md5_init(libssh2_md5_ctx *ctx)
|
||||
{
|
||||
/* MD5 digest is not supported in OpenSSL FIPS mode
|
||||
* Trying to init it will result in a latent OpenSSL error:
|
||||
* "digital envelope routines:FIPS_DIGESTINIT:disabled for fips"
|
||||
* So, just return 0 in FIPS mode
|
||||
*/
|
||||
#if OPENSSL_VERSION_NUMBER >= 0x000907000L && \
|
||||
defined(OPENSSL_VERSION_MAJOR) && \
|
||||
OPENSSL_VERSION_MAJOR < 3 && \
|
||||
!defined(LIBRESSL_VERSION_NUMBER)
|
||||
if(FIPS_mode() != 0)
|
||||
return 0;
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_OPAQUE_STRUCTS
|
||||
*ctx = EVP_MD_CTX_new();
|
||||
|
||||
|
|
@ -2402,6 +2428,7 @@ gen_publickey_from_ecdsa_openssh_priv_data(LIBSSH2_SESSION *session,
|
|||
|
||||
if((rc = _libssh2_ecdsa_curve_name_with_octal_new(&ec_key, point_buf,
|
||||
pointlen, curve_type)) != 0) {
|
||||
rc = -1;
|
||||
_libssh2_error(session, LIBSSH2_ERROR_PROTO,
|
||||
"ECDSA could not create key");
|
||||
goto fail;
|
||||
|
|
@ -2410,6 +2437,8 @@ gen_publickey_from_ecdsa_openssh_priv_data(LIBSSH2_SESSION *session,
|
|||
bn_exponent = BN_new();
|
||||
if(bn_exponent == NULL) {
|
||||
rc = -1;
|
||||
_libssh2_error(session, LIBSSH2_ERROR_ALLOC,
|
||||
"Unable to allocate memory for private key data");
|
||||
goto fail;
|
||||
}
|
||||
|
||||
|
|
@ -2436,15 +2465,10 @@ gen_publickey_from_ecdsa_openssh_priv_data(LIBSSH2_SESSION *session,
|
|||
return rc;
|
||||
|
||||
fail:
|
||||
|
||||
if(ec_key != NULL)
|
||||
EC_KEY_free(ec_key);
|
||||
|
||||
return _libssh2_error(session,
|
||||
LIBSSH2_ERROR_ALLOC,
|
||||
"Unable to allocate memory for private key data");
|
||||
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
static int
|
||||
|
|
@ -3037,17 +3061,13 @@ _libssh2_pub_priv_openssh_keyfilememory(LIBSSH2_SESSION *session,
|
|||
if(key_ctx != NULL)
|
||||
*key_ctx = NULL;
|
||||
|
||||
if(session == NULL) {
|
||||
_libssh2_error(session, LIBSSH2_ERROR_PROTO,
|
||||
"Session is required");
|
||||
return -1;
|
||||
}
|
||||
if(session == NULL)
|
||||
return _libssh2_error(session, LIBSSH2_ERROR_PROTO,
|
||||
"Session is required");
|
||||
|
||||
if(key_type != NULL && (strlen(key_type) > 11 || strlen(key_type) < 7)) {
|
||||
_libssh2_error(session, LIBSSH2_ERROR_PROTO,
|
||||
"type is invalid");
|
||||
return -1;
|
||||
}
|
||||
if(key_type != NULL && (strlen(key_type) > 11 || strlen(key_type) < 7))
|
||||
return _libssh2_error(session, LIBSSH2_ERROR_PROTO,
|
||||
"type is invalid");
|
||||
|
||||
_libssh2_init_if_needed();
|
||||
|
||||
|
|
@ -3055,20 +3075,18 @@ _libssh2_pub_priv_openssh_keyfilememory(LIBSSH2_SESSION *session,
|
|||
privatekeydata,
|
||||
privatekeydata_len, &decrypted);
|
||||
|
||||
if(rc) {
|
||||
if(rc)
|
||||
return rc;
|
||||
}
|
||||
|
||||
/* We have a new key file, now try and parse it using supported types */
|
||||
rc = _libssh2_get_string(decrypted, &buf, NULL);
|
||||
|
||||
if(rc != 0 || buf == NULL) {
|
||||
_libssh2_error(session, LIBSSH2_ERROR_PROTO,
|
||||
"Public key type in decrypted key data not found");
|
||||
return -1;
|
||||
}
|
||||
if(rc != 0 || buf == NULL)
|
||||
return _libssh2_error(session, LIBSSH2_ERROR_PROTO,
|
||||
"Public key type in decrypted "
|
||||
"key data not found");
|
||||
|
||||
rc = -1;
|
||||
rc = LIBSSH2_ERROR_FILE;
|
||||
|
||||
#if LIBSSH2_ED25519
|
||||
if(strcmp("ssh-ed25519", (const char *)buf) == 0) {
|
||||
|
|
@ -3122,6 +3140,11 @@ _libssh2_pub_priv_openssh_keyfilememory(LIBSSH2_SESSION *session,
|
|||
}
|
||||
#endif
|
||||
|
||||
if(rc == LIBSSH2_ERROR_FILE)
|
||||
rc = _libssh2_error(session, LIBSSH2_ERROR_FILE,
|
||||
"Unable to extract public key from private key file: "
|
||||
"invalid/unrecognized private key file format");
|
||||
|
||||
if(decrypted)
|
||||
_libssh2_string_buf_free(session, decrypted);
|
||||
|
||||
|
|
@ -3161,10 +3184,10 @@ _libssh2_pub_priv_keyfilememory(LIBSSH2_SESSION *session,
|
|||
"Computing public key from private key.");
|
||||
|
||||
bp = BIO_new_mem_buf((char *)privatekeydata, privatekeydata_len);
|
||||
if(!bp) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
if(!bp)
|
||||
return _libssh2_error(session, LIBSSH2_ERROR_ALLOC,
|
||||
"Unable to allocate memory when"
|
||||
"computing public key");
|
||||
BIO_reset(bp);
|
||||
pk = PEM_read_bio_PrivateKey(bp, NULL, NULL, (void *)passphrase);
|
||||
BIO_free(bp);
|
||||
|
|
@ -3179,15 +3202,8 @@ _libssh2_pub_priv_keyfilememory(LIBSSH2_SESSION *session,
|
|||
privatekeydata,
|
||||
privatekeydata_len,
|
||||
(unsigned const char *)passphrase);
|
||||
if(st != 0) {
|
||||
return _libssh2_error(session,
|
||||
LIBSSH2_ERROR_FILE,
|
||||
"Unable to extract public key "
|
||||
"from private key file: "
|
||||
"Wrong passphrase or invalid/unrecognized "
|
||||
"private key file format");
|
||||
}
|
||||
|
||||
if(st != 0)
|
||||
return st;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -137,7 +137,7 @@
|
|||
|
||||
#define EC_MAX_POINT_LEN ((528 * 2 / 8) + 1)
|
||||
|
||||
#define _libssh2_random(buf, len) RAND_bytes ((buf), (len))
|
||||
#define _libssh2_random(buf, len) (RAND_bytes((buf), (len)) == 1 ? 0 : -1)
|
||||
|
||||
#define libssh2_prepare_iovec(vec, len) /* Empty. */
|
||||
|
||||
|
|
|
|||
|
|
@ -1323,9 +1323,11 @@ _libssh2_packet_requirev(LIBSSH2_SESSION *session,
|
|||
|
||||
if(strchr((char *) packet_types, ret)) {
|
||||
/* Be lazy, let packet_ask pull it out of the brigade */
|
||||
return _libssh2_packet_askv(session, packet_types, data,
|
||||
int ret = _libssh2_packet_askv(session, packet_types, data,
|
||||
data_len, match_ofs, match_buf,
|
||||
match_len);
|
||||
state->start = 0;
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -176,6 +176,8 @@ _libssh2_pem_parse(LIBSSH2_SESSION * session,
|
|||
linelen = strlen(line);
|
||||
tmp = LIBSSH2_REALLOC(session, b64data, b64datalen + linelen);
|
||||
if(!tmp) {
|
||||
_libssh2_error(session, LIBSSH2_ERROR_ALLOC,
|
||||
"Unable to allocate memory for PEM parsing");
|
||||
ret = -1;
|
||||
goto out;
|
||||
}
|
||||
|
|
@ -319,6 +321,8 @@ _libssh2_pem_parse_memory(LIBSSH2_SESSION * session,
|
|||
linelen = strlen(line);
|
||||
tmp = LIBSSH2_REALLOC(session, b64data, b64datalen + linelen);
|
||||
if(!tmp) {
|
||||
_libssh2_error(session, LIBSSH2_ERROR_ALLOC,
|
||||
"Unable to allocate memory for PEM parsing");
|
||||
ret = -1;
|
||||
goto out;
|
||||
}
|
||||
|
|
@ -690,6 +694,8 @@ _libssh2_openssh_pem_parse(LIBSSH2_SESSION * session,
|
|||
linelen = strlen(line);
|
||||
tmp = LIBSSH2_REALLOC(session, b64data, b64datalen + linelen);
|
||||
if(!tmp) {
|
||||
_libssh2_error(session, LIBSSH2_ERROR_ALLOC,
|
||||
"Unable to allocate memory for PEM parsing");
|
||||
ret = -1;
|
||||
goto out;
|
||||
}
|
||||
|
|
@ -738,17 +744,17 @@ _libssh2_openssh_pem_parse_memory(LIBSSH2_SESSION * session,
|
|||
size_t off = 0;
|
||||
int ret;
|
||||
|
||||
if(filedata == NULL || filedata_len <= 0) {
|
||||
return -1;
|
||||
}
|
||||
if(filedata == NULL || filedata_len <= 0)
|
||||
return _libssh2_error(session, LIBSSH2_ERROR_PROTO,
|
||||
"Error parsing PEM: filedata missing");
|
||||
|
||||
do {
|
||||
|
||||
*line = '\0';
|
||||
|
||||
if(off >= filedata_len) {
|
||||
return -1;
|
||||
}
|
||||
if(off >= filedata_len)
|
||||
return _libssh2_error(session, LIBSSH2_ERROR_PROTO,
|
||||
"Error parsing PEM: offset out of bounds");
|
||||
|
||||
if(readline_memory(line, LINE_SIZE, filedata, filedata_len, &off)) {
|
||||
return -1;
|
||||
|
|
@ -766,7 +772,9 @@ _libssh2_openssh_pem_parse_memory(LIBSSH2_SESSION * session,
|
|||
linelen = strlen(line);
|
||||
tmp = LIBSSH2_REALLOC(session, b64data, b64datalen + linelen);
|
||||
if(!tmp) {
|
||||
ret = -1;
|
||||
ret = _libssh2_error(session, LIBSSH2_ERROR_ALLOC,
|
||||
"Unable to allocate memory for "
|
||||
"PEM parsing");
|
||||
goto out;
|
||||
}
|
||||
memcpy(tmp + b64datalen, line, linelen);
|
||||
|
|
@ -777,7 +785,8 @@ _libssh2_openssh_pem_parse_memory(LIBSSH2_SESSION * session,
|
|||
*line = '\0';
|
||||
|
||||
if(off >= filedata_len) {
|
||||
ret = -1;
|
||||
ret = _libssh2_error(session, LIBSSH2_ERROR_PROTO,
|
||||
"Error parsing PEM: offset out of bounds");
|
||||
goto out;
|
||||
}
|
||||
|
||||
|
|
@ -787,9 +796,9 @@ _libssh2_openssh_pem_parse_memory(LIBSSH2_SESSION * session,
|
|||
}
|
||||
} while(strcmp(line, OPENSSH_HEADER_END) != 0);
|
||||
|
||||
if(!b64data) {
|
||||
return -1;
|
||||
}
|
||||
if(!b64data)
|
||||
return _libssh2_error(session, LIBSSH2_ERROR_PROTO,
|
||||
"Error parsing PEM: base 64 data missing");
|
||||
|
||||
ret = _libssh2_openssh_pem_parse_data(session, passphrase, b64data,
|
||||
b64datalen, decrypted_buf);
|
||||
|
|
|
|||
|
|
@ -488,6 +488,8 @@ int _libssh2_transport_read(LIBSSH2_SESSION * session)
|
|||
p->wptr += blocksize - 5; /* advance write pointer */
|
||||
}
|
||||
else {
|
||||
if(p->payload)
|
||||
LIBSSH2_FREE(session, p->payload);
|
||||
return LIBSSH2_ERROR_OUT_OF_BOUNDARY;
|
||||
}
|
||||
}
|
||||
|
|
@ -570,6 +572,8 @@ int _libssh2_transport_read(LIBSSH2_SESSION * session)
|
|||
memcpy(p->wptr, &p->buf[p->readidx], numbytes);
|
||||
}
|
||||
else {
|
||||
if(p->payload)
|
||||
LIBSSH2_FREE(session, p->payload);
|
||||
return LIBSSH2_ERROR_OUT_OF_BOUNDARY;
|
||||
}
|
||||
|
||||
|
|
@ -858,7 +862,10 @@ int _libssh2_transport_send(LIBSSH2_SESSION *session,
|
|||
p->outbuf[4] = (unsigned char)padding_length;
|
||||
|
||||
/* fill the padding area with random junk */
|
||||
_libssh2_random(p->outbuf + 5 + data_len, padding_length);
|
||||
if(_libssh2_random(p->outbuf + 5 + data_len, padding_length)) {
|
||||
return _libssh2_error(session, LIBSSH2_ERROR_RANDGEN,
|
||||
"Unable to get random bytes for packet padding");
|
||||
}
|
||||
|
||||
if(encrypted) {
|
||||
size_t i;
|
||||
|
|
|
|||
|
|
@ -828,11 +828,6 @@ userauth_hostbased_fromfile(LIBSSH2_SESSION *session,
|
|||
{
|
||||
int rc;
|
||||
|
||||
#if !LIBSSH2_RSA
|
||||
return _libssh2_error(session, LIBSSH2_ERROR_METHOD_NOT_SUPPORTED,
|
||||
"RSA is not supported by crypto backend");
|
||||
#endif
|
||||
|
||||
if(session->userauth_host_state == libssh2_NB_state_idle) {
|
||||
const LIBSSH2_HOSTKEY_METHOD *privkeyobj;
|
||||
unsigned char *pubkeydata = NULL;
|
||||
|
|
@ -1075,7 +1070,21 @@ libssh2_userauth_hostbased_fromfile_ex(LIBSSH2_SESSION *session,
|
|||
return rc;
|
||||
}
|
||||
|
||||
|
||||
static int plain_method_len(const char *method, size_t method_len)
|
||||
{
|
||||
if(!strncmp("ecdsa-sha2-nistp256-cert-v01@openssh.com",
|
||||
method,
|
||||
method_len) ||
|
||||
!strncmp("ecdsa-sha2-nistp384-cert-v01@openssh.com",
|
||||
method,
|
||||
method_len) ||
|
||||
!strncmp("ecdsa-sha2-nistp521-cert-v01@openssh.com",
|
||||
method,
|
||||
method_len)) {
|
||||
return 19;
|
||||
}
|
||||
return method_len;
|
||||
}
|
||||
|
||||
int
|
||||
_libssh2_userauth_publickey(LIBSSH2_SESSION *session,
|
||||
|
|
@ -1340,6 +1349,10 @@ _libssh2_userauth_publickey(LIBSSH2_SESSION *session,
|
|||
s = session->userauth_pblc_packet + session->userauth_pblc_packet_len;
|
||||
session->userauth_pblc_b = NULL;
|
||||
|
||||
session->userauth_pblc_method_len =
|
||||
plain_method_len((const char *)session->userauth_pblc_method,
|
||||
session->userauth_pblc_method_len);
|
||||
|
||||
_libssh2_store_u32(&s,
|
||||
4 + session->userauth_pblc_method_len + 4 +
|
||||
sig_len);
|
||||
|
|
@ -1438,11 +1451,6 @@ userauth_publickey_frommemory(LIBSSH2_SESSION *session,
|
|||
void *abstract = &privkey_file;
|
||||
int rc;
|
||||
|
||||
#if !LIBSSH2_RSA
|
||||
return _libssh2_error(session, LIBSSH2_ERROR_METHOD_NOT_SUPPORTED,
|
||||
"RSA is not supported by crypto backend");
|
||||
#endif
|
||||
|
||||
privkey_file.filename = privatekeydata;
|
||||
privkey_file.passphrase = passphrase;
|
||||
|
||||
|
|
@ -1457,15 +1465,14 @@ userauth_publickey_frommemory(LIBSSH2_SESSION *session,
|
|||
}
|
||||
else if(privatekeydata_len && privatekeydata) {
|
||||
/* Compute public key from private key. */
|
||||
if(_libssh2_pub_priv_keyfilememory(session,
|
||||
rc = _libssh2_pub_priv_keyfilememory(session,
|
||||
&session->userauth_pblc_method,
|
||||
&session->userauth_pblc_method_len,
|
||||
&pubkeydata, &pubkeydata_len,
|
||||
privatekeydata, privatekeydata_len,
|
||||
passphrase))
|
||||
return _libssh2_error(session, LIBSSH2_ERROR_FILE,
|
||||
"Unable to extract public key "
|
||||
"from private key.");
|
||||
passphrase);
|
||||
if(rc)
|
||||
return rc;
|
||||
}
|
||||
else {
|
||||
return _libssh2_error(session, LIBSSH2_ERROR_FILE,
|
||||
|
|
@ -1500,11 +1507,6 @@ userauth_publickey_fromfile(LIBSSH2_SESSION *session,
|
|||
void *abstract = &privkey_file;
|
||||
int rc;
|
||||
|
||||
#if !LIBSSH2_RSA
|
||||
return _libssh2_error(session, LIBSSH2_ERROR_METHOD_NOT_SUPPORTED,
|
||||
"RSA is not supported by crypto backend");
|
||||
#endif
|
||||
|
||||
privkey_file.filename = privatekey;
|
||||
privkey_file.passphrase = passphrase;
|
||||
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
#define _UPP_SSH_libssh2upp_h_
|
||||
|
||||
#include "libssh2/agent.c"
|
||||
#include "libssh2/agent_win.c"
|
||||
#include "libssh2/bcrypt_pbkdf.c"
|
||||
#include "libssh2/blowfish.c"
|
||||
#include "libssh2/channel.c"
|
||||
|
|
|
|||
|
|
@ -479,6 +479,11 @@ void Stream::SerializeRaw(word *data, int64 count)
|
|||
#endif
|
||||
}
|
||||
|
||||
void Stream::SerializeRaw(int16 *data, int64 count)
|
||||
{
|
||||
SerializeRaw((word *)data, count);
|
||||
}
|
||||
|
||||
void Stream::SerializeRaw(dword *data, int64 count)
|
||||
{
|
||||
ASSERT(count >= 0);
|
||||
|
|
@ -491,6 +496,11 @@ void Stream::SerializeRaw(dword *data, int64 count)
|
|||
#endif
|
||||
}
|
||||
|
||||
void Stream::SerializeRaw(int *data, int64 count)
|
||||
{
|
||||
SerializeRaw((dword *)data, count);
|
||||
}
|
||||
|
||||
void Stream::SerializeRaw(uint64 *data, int64 count)
|
||||
{
|
||||
ASSERT(count >= 0);
|
||||
|
|
@ -503,6 +513,16 @@ void Stream::SerializeRaw(uint64 *data, int64 count)
|
|||
#endif
|
||||
}
|
||||
|
||||
void Stream::SerializeRaw(float *data, int64 count)
|
||||
{
|
||||
SerializeRaw((dword *)data, count);
|
||||
}
|
||||
|
||||
void Stream::SerializeRaw(double *data, int64 count)
|
||||
{
|
||||
SerializeRaw((uint64 *)data, count);
|
||||
}
|
||||
|
||||
void Stream::Pack(dword& w) {
|
||||
if(IsError()) return;
|
||||
if(IsLoading()) {
|
||||
|
|
@ -928,7 +948,7 @@ void CompareStream::Open(Stream& astream) {
|
|||
style = STRM_WRITE|STRM_SEEK;
|
||||
stream = &astream;
|
||||
size = pos = 0;
|
||||
wrlim = buffer + 128;
|
||||
wrlim = buffer + 1024;
|
||||
ptr = buffer;
|
||||
equal = true;
|
||||
ClearError();
|
||||
|
|
|
|||
|
|
@ -188,8 +188,12 @@ public:
|
|||
|
||||
void SerializeRaw(byte *data, int64 count);
|
||||
void SerializeRaw(word *data, int64 count);
|
||||
void SerializeRaw(int16 *data, int64 count);
|
||||
void SerializeRaw(dword *data, int64 count);
|
||||
void SerializeRaw(int *data, int64 count);
|
||||
void SerializeRaw(uint64 *data, int64 count);
|
||||
void SerializeRaw(float *data, int64 count);
|
||||
void SerializeRaw(double *data, int64 count);
|
||||
|
||||
String GetAllRLE(int size);
|
||||
void SerializeRLE(byte *data, int count);
|
||||
|
|
@ -496,7 +500,7 @@ private:
|
|||
Stream *stream;
|
||||
bool equal;
|
||||
int64 size;
|
||||
byte h[128];
|
||||
byte h[1024];
|
||||
|
||||
void Compare(int64 pos, const void *data, int size);
|
||||
|
||||
|
|
|
|||
|
|
@ -71,13 +71,21 @@ String MonName(int i, int lang)
|
|||
static thread_local char s_date_format_thread[64];
|
||||
static char s_date_format_main[64] = "%2:02d/%3:02d/%1:4d";
|
||||
|
||||
void SetDateFormat(const char *fmt)
|
||||
void SetDateFormat(const char *fmt)
|
||||
{
|
||||
strncpy(s_date_format_thread, fmt, 63);
|
||||
if(Thread::IsMain())
|
||||
strncpy(s_date_format_main, fmt, 63);
|
||||
}
|
||||
|
||||
String Format(Date date, const char *fmt)
|
||||
{
|
||||
String s;
|
||||
if(IsNull(date))
|
||||
return String();
|
||||
return Format(fmt, date.year, date.month, date.day, DayOfWeek(date));
|
||||
}
|
||||
|
||||
String Format(Date date) {
|
||||
String s;
|
||||
if(IsNull(date))
|
||||
|
|
|
|||
|
|
@ -85,6 +85,7 @@ const char *StrToDate(Date& d, const char *s, Date def);
|
|||
const char *StrToDate(Date& d, const char *s);
|
||||
Date ScanDate(const char *fmt, const char *s, Date def = Null);
|
||||
Date ScanDate(const char *s, Date def = Null);
|
||||
String Format(Date date, const char *fmt);
|
||||
String Format(Date date);
|
||||
int CharFilterDate(int c);
|
||||
|
||||
|
|
|
|||
|
|
@ -476,10 +476,14 @@ size_t SizeBySerialize(const T& cont)
|
|||
template <class T>
|
||||
bool IsEqualBySerialize(const T& a, const T& b)
|
||||
{
|
||||
StringStream sa, sb;
|
||||
StringStream sa;
|
||||
const_cast<T&>(a).Serialize(sa);
|
||||
const_cast<T&>(b).Serialize(sb);
|
||||
return sa.GetResult() == sb.GetResult();
|
||||
|
||||
StringStream ss(sa.GetResult());
|
||||
CompareStream cs(ss);
|
||||
|
||||
const_cast<T&>(b).Serialize(cs);
|
||||
return cs;
|
||||
}
|
||||
|
||||
String Replace(const String& s, const Vector<String>& find, const Vector<String>& replace);
|
||||
|
|
|
|||
|
|
@ -258,7 +258,7 @@ public:
|
|||
operator const T*() const { return (T*)vector; }
|
||||
|
||||
Vector& operator<<(const T& x) { Add(x); return *this; }
|
||||
Vector& operator<<(T&& x) { Add(pick(x)); return *this; }
|
||||
Vector& operator<<(T&& x) { Add(pick(x)); return *this; }
|
||||
|
||||
#ifdef UPP
|
||||
void Serialize(Stream& s) { StreamContainer(s, *this); }
|
||||
|
|
|
|||
|
|
@ -1,3 +1,28 @@
|
|||
template <class T>
|
||||
void StreamContainerRaw(Stream& s, T& cont)
|
||||
{ // optimised version for fundamental types, for Vector
|
||||
int n = cont.GetCount();
|
||||
s / n;
|
||||
if(n < 0) {
|
||||
s.LoadError();
|
||||
return;
|
||||
}
|
||||
if(s.IsLoading()) {
|
||||
cont.Clear();
|
||||
cont.Reserve(min(n, int(256*1024 / sizeof(T)))); // protect against invalid streams...
|
||||
|
||||
while(n > 0) {
|
||||
int count = min(n, 65536);
|
||||
int q = cont.GetCount();
|
||||
cont.SetCount(q + count);
|
||||
s.SerializeRaw(cont.begin() + q, count);
|
||||
n -= count;
|
||||
}
|
||||
}
|
||||
else
|
||||
s.SerializeRaw(cont.begin(), n);
|
||||
}
|
||||
|
||||
template <class T>
|
||||
void StreamContainer(Stream& s, T& cont)
|
||||
{
|
||||
|
|
@ -21,6 +46,54 @@ void StreamContainer(Stream& s, T& cont)
|
|||
}
|
||||
}
|
||||
|
||||
template <>
|
||||
inline void StreamContainer(Stream& s, Vector<byte>& cont)
|
||||
{
|
||||
StreamContainerRaw(s, cont);
|
||||
}
|
||||
|
||||
template <>
|
||||
inline void StreamContainer(Stream& s, Vector<word>& cont)
|
||||
{
|
||||
StreamContainerRaw(s, cont);
|
||||
}
|
||||
|
||||
template <>
|
||||
inline void StreamContainer(Stream& s, Vector<int16>& cont)
|
||||
{
|
||||
StreamContainerRaw(s, cont);
|
||||
}
|
||||
|
||||
template <>
|
||||
inline void StreamContainer(Stream& s, Vector<dword>& cont)
|
||||
{
|
||||
StreamContainerRaw(s, cont);
|
||||
}
|
||||
|
||||
template <>
|
||||
inline void StreamContainer(Stream& s, Vector<int>& cont)
|
||||
{
|
||||
StreamContainerRaw(s, cont);
|
||||
}
|
||||
|
||||
template <>
|
||||
inline void StreamContainer(Stream& s, Vector<uint64>& cont)
|
||||
{
|
||||
StreamContainerRaw(s, cont);
|
||||
}
|
||||
|
||||
template <>
|
||||
inline void StreamContainer(Stream& s, Vector<float>& cont)
|
||||
{
|
||||
StreamContainerRaw(s, cont);
|
||||
}
|
||||
|
||||
template <>
|
||||
inline void StreamContainer(Stream& s, Vector<double>& cont)
|
||||
{
|
||||
StreamContainerRaw(s, cont);
|
||||
}
|
||||
|
||||
template <class T>
|
||||
T * Vector<T>::RawAlloc(int& n)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -411,7 +411,7 @@ is that [* pos] is range checked in debug mode.&]
|
|||
[s7; [*/ Return value]-|Iterator.&]
|
||||
[s3; &]
|
||||
[s4; &]
|
||||
[s5;K%- friend_[@(0.0.255) void][@(64) _]Swap[@(64) (][^`:`:BiArray^@(64) BiArray][@(64) `&_][@3 a
|
||||
[s5;K%- friend_[@(0.0.255) void][@(64) _][* Swap][@(64) (][^`:`:BiArray^@(64) BiArray][@(64) `&_][@3 a
|
||||
][@(64) , ][^`:`:BiArray^@(64) BiArray][@(64) `&_][@3 b][@(64) )]&]
|
||||
[s2; Specialization of the generic [* Swap] for BiArrays. Swaps BiArray
|
||||
in low constant time operation.&]
|
||||
|
|
|
|||
|
|
@ -1,5 +1,4 @@
|
|||
topic "Date formatting and scanning";
|
||||
[2 $$0,0#00000000000000000000000000000000:Default]
|
||||
[i448;a25;kKO9;2 $$1,0#37138531426314131252341829483380:class]
|
||||
[l288;2 $$2,0#27521748481378242620020725143825:desc]
|
||||
[0 $$3,0#96390100711032703541132217272105:end]
|
||||
|
|
@ -9,6 +8,7 @@ topic "Date formatting and scanning";
|
|||
[l288;i1121;b17;O9;~~~.1408;2 $$7,0#10431211400427159095818037425705:param]
|
||||
[i448;b42;O9;2 $$8,8#61672508125594000341940100500538:tparam]
|
||||
[b42;2 $$9,9#13035079074754324216151401829390:normal]
|
||||
[2 $$0,0#00000000000000000000000000000000:Default]
|
||||
[{_}%EN-US
|
||||
[ {{10000@(113.42.0) [s0;%- [*@7;4 Date formatting and scanning]]}}&]
|
||||
[s0;*@3;4%- &]
|
||||
|
|
@ -25,11 +25,18 @@ accepted `- text must match abbreviated or full name of month.&]
|
|||
character right after the date.&]
|
||||
[s3; &]
|
||||
[s4;%- &]
|
||||
[s5;:Upp`:`:Format`(Upp`:`:Date`,const char`*`):%- String [* Format](Date
|
||||
[*@3 date], [@(0.0.255) const] [@(0.0.255) char] [@(0.0.255) `*][*@3 fmt])&]
|
||||
[s2; Formats date. Date is formated using the standard [^topic`:`/`/Core`/src`/Format`$en`-us^ F
|
||||
ormat] function and the four supplied integer value arguments
|
||||
are year, month, day and day of week.&]
|
||||
[s3;%- &]
|
||||
[s4;%- &]
|
||||
[s5;:Format`(Date`):%- [_^String^ String]_[* Format]([_^Date^ Date]_[*@3 date])&]
|
||||
[s2; Formats date. Date is formated using the standard [^topic`:`/`/Core`/src`/Format`$en`-us^ F
|
||||
ormat] function, where the string set by SetDateFormat is used
|
||||
as formating string, and the three supplied integer value arguments
|
||||
are year, month and day.&]
|
||||
as formating string, and the four supplied integer value arguments
|
||||
are year, month, day and day of week.&]
|
||||
[s7; [%-*C@3 date]-|Date to format.&]
|
||||
[s7; [*/ Return value]-|Formatted date.&]
|
||||
[s3; &]
|
||||
|
|
@ -48,7 +55,7 @@ are 3 integer arguments passed to [^topic`:`/`/Core`/src`/Format`$en`-us^ Format
|
|||
with this string. First is year, second is month and third is
|
||||
day. This is per`-thread setting with threads inheriting the
|
||||
setting of main thread.&]
|
||||
[s3; &]
|
||||
[s3;%- &]
|
||||
[s4;%- &]
|
||||
[s5;:SetDateScan`(const char`*`):%- [@(0.0.255) void]_[* SetDateScan]([@(0.0.255) const]_[@(0.0.255) c
|
||||
har]_`*[*@3 scan])&]
|
||||
|
|
|
|||
|
|
@ -153,7 +153,7 @@ from [%-*@4 TT]. [%-*@4 T] must be polymorphic.&]
|
|||
[s0; &]
|
||||
[ {{10000@(113.42.0) [s0;%% [*@7;4 MakeOne]]}}&]
|
||||
[s0; &]
|
||||
[s5;:Upp`:`:MakeOne`(Args`.`.`.args`): [@(0.0.255) template]_<[@(0.0.255) class]_[*@4 T],
|
||||
[s5;:Upp`:`:MakeOne`(Args`&`&`.`.`.`): [@(0.0.255) template]_<[@(0.0.255) class]_[*@4 T],
|
||||
[@(0.0.255) class...]_[*@4 Args]>_[_^Upp`:`:One^ One]<[*@4 T]>_[* MakeOne]([*@4 Args][@(0.0.255) .
|
||||
..]_args)&]
|
||||
[s2;%% This simple utility function creates One<T> instance.&]
|
||||
|
|
|
|||
|
|
@ -766,37 +766,32 @@ the end is written.&]
|
|||
[* SerializeRaw]([_^topic`:`/`/Core`/src`/PrimitiveDataTypes`$en`-us`#Upp`:`:byte`:`:typedef^ b
|
||||
yte]_`*[*@3 data], [_^topic`:`/`/Core`/src`/PrimitiveDataTypes`$en`-us`#Upp`:`:int64`:`:typedef^ i
|
||||
nt64]_[*@3 count])&]
|
||||
[s2; Serializes raw 8`-bit data. Might invoke LoadError if there
|
||||
is not enough data to load. Data are always stored in little`-endian
|
||||
mode (conversion performed on BE systems as necessary).&]
|
||||
[s3; &]
|
||||
[s4;%- &]
|
||||
[s5;:Upp`:`:Stream`:`:SerializeRaw`(Upp`:`:word`*`,Upp`:`:int64`):%- [@(0.0.255) void]_
|
||||
[* SerializeRaw]([_^topic`:`/`/Core`/src`/PrimitiveDataTypes`$en`-us`#Upp`:`:word`:`:typedef^ w
|
||||
ord]_`*[*@3 data], [_^topic`:`/`/Core`/src`/PrimitiveDataTypes`$en`-us`#Upp`:`:int64`:`:typedef^ i
|
||||
nt64]_[*@3 count])&]
|
||||
[s2; Serializes raw 16`-bit data. Might invoke LoadError if there
|
||||
is not enough data to load. Data are always stored in little`-endian
|
||||
mode (conversion performed on BE systems as necessary).&]
|
||||
[s3; &]
|
||||
[s4;%- &]
|
||||
[s5;:Upp`:`:Stream`:`:SerializeRaw`(Upp`:`:int16`*`,Upp`:`:int64`):%- [@(0.0.255) void]
|
||||
[* SerializeRaw](int16 [@(0.0.255) `*][*@3 data], int64 [*@3 count])&]
|
||||
[s5;:Upp`:`:Stream`:`:SerializeRaw`(Upp`:`:dword`*`,Upp`:`:int64`):%- [@(0.0.255) void]_
|
||||
[* SerializeRaw]([_^topic`:`/`/Core`/src`/PrimitiveDataTypes`$en`-us`#Upp`:`:dword`:`:typedef^ d
|
||||
word]_`*[*@3 data], [_^topic`:`/`/Core`/src`/PrimitiveDataTypes`$en`-us`#Upp`:`:int64`:`:typedef^ i
|
||||
nt64]_[*@3 count])&]
|
||||
[s2; Serializes raw 32`-bit data. Might invoke LoadError if there
|
||||
is not enough data to load. Data are always stored in little`-endian
|
||||
mode (conversion performed on BE systems as necessary).&]
|
||||
[s3; &]
|
||||
[s4;%- &]
|
||||
[s5;:Upp`:`:Stream`:`:SerializeRaw`(int`*`,Upp`:`:int64`):%- [@(0.0.255) void]
|
||||
[* SerializeRaw]([@(0.0.255) int] [@(0.0.255) `*][*@3 data], int64 [*@3 count])&]
|
||||
[s5;:Upp`:`:Stream`:`:SerializeRaw`(Upp`:`:uint64`*`,Upp`:`:int64`):%- [@(0.0.255) void
|
||||
]_[* SerializeRaw]([_^topic`:`/`/Core`/src`/PrimitiveDataTypes`$en`-us`#Upp`:`:uint64`:`:typedef^ u
|
||||
int64]_`*[*@3 data], [_^topic`:`/`/Core`/src`/PrimitiveDataTypes`$en`-us`#Upp`:`:int64`:`:typedef^ i
|
||||
nt64]_[*@3 count])&]
|
||||
[s2; Serializes raw 64`-bit data. Might invoke LoadError if there
|
||||
is not enough data to load. Data are always stored in little`-endian
|
||||
[s5;:Upp`:`:Stream`:`:SerializeRaw`(float`*`,Upp`:`:int64`):%- [@(0.0.255) void]
|
||||
[* SerializeRaw]([@(0.0.255) float] [@(0.0.255) `*][*@3 data], int64
|
||||
[*@3 count])&]
|
||||
[s5;:Upp`:`:Stream`:`:SerializeRaw`(double`*`,Upp`:`:int64`):%- [@(0.0.255) void]
|
||||
[* SerializeRaw]([@(0.0.255) double] [@(0.0.255) `*][*@3 data], int64
|
||||
[*@3 count])&]
|
||||
[s2; Serializes raw data. Might invoke LoadError if there is not
|
||||
enough data to load. Data are always stored in little`-endian
|
||||
mode (conversion performed on BE systems as necessary).&]
|
||||
[s3; &]
|
||||
[s3;%- &]
|
||||
[s4;%- &]
|
||||
[s5;:Stream`:`:SerializeRLE`(byte`*`,int`):%- [@(0.0.255) void]_[* SerializeRLE]([_^topic`:`/`/Core`/src`/PrimitiveDataTypes`$en`-us`#Upp`:`:byte`:`:typedef^ b
|
||||
yte]_`*[*@3 data], [@(0.0.255) int]_[*@3 count])&]
|
||||
|
|
|
|||
|
|
@ -116,8 +116,8 @@ s...]_[*@4 Args]>_[*@4 T][@(0.0.255) `&]_[* Create]([*@4 Args][@(0.0.255) ...]_a
|
|||
&]
|
||||
[s3; &]
|
||||
[s4;%- &]
|
||||
[s5;:Upp`:`:Vector`:`:Create`(Args`&`&`.`.`.args`):%- [@(0.0.255) template]_<[@(0.0.255) c
|
||||
lass...]_[*@4 Args]>_[*@4 T][@(0.0.255) `&]_[* Create]([*@4 Args][@(0.0.255) `&`&...]_args)&]
|
||||
[s5;:Upp`:`:Vector`:`:Create`(Args`&`&`.`.`.`):%- [@(0.0.255) template]_<[@(0.0.255) clas
|
||||
s...]_[*@4 Args]>_[*@4 T][@(0.0.255) `&]_[* Create]([*@4 Args][@(0.0.255) `&`&...]_args)&]
|
||||
[s2; Creates and adds a new element to the Array. [%-*@3 args] are
|
||||
forwarded to constructor.&]
|
||||
[s3; &]
|
||||
|
|
|
|||
|
|
@ -13,6 +13,8 @@ private:
|
|||
static void DoCancelPreedit();
|
||||
|
||||
void UpdateDHCtrls();
|
||||
|
||||
void UseImmersiveDarkModeForWindowBorder();
|
||||
|
||||
public:
|
||||
static Win32Event ExitLoopEvent;
|
||||
|
|
|
|||
|
|
@ -463,6 +463,23 @@ UDropTarget *NewUDropTarget(Ctrl *);
|
|||
|
||||
String WindowStyleAsString(dword style, dword exstyle);
|
||||
|
||||
void Ctrl::UseImmersiveDarkModeForWindowBorder()
|
||||
{
|
||||
static HRESULT (WINAPI *DwmSetWindowAttribute)(HWND hwnd, DWORD dwAttribute, LPCVOID pvAttribute, DWORD cbAttribute);
|
||||
ONCELOCK {
|
||||
DllFn(DwmSetWindowAttribute, "dwmapi.dll", "DwmSetWindowAttribute");
|
||||
}
|
||||
if (!DwmSetWindowAttribute) {
|
||||
return;
|
||||
}
|
||||
const auto DWMWA_USE_IMMERSIVE_DARK_MODE = 20;
|
||||
|
||||
BOOL useDarkTheme = IsDarkTheme();
|
||||
DwmSetWindowAttribute(
|
||||
utop->hwnd, DWMWA_USE_IMMERSIVE_DARK_MODE,
|
||||
&useDarkTheme, sizeof(useDarkTheme));
|
||||
}
|
||||
|
||||
void Ctrl::Create(HWND parent, DWORD style, DWORD exstyle, bool savebits, int show, bool dropshadow)
|
||||
{
|
||||
GuiLock __;
|
||||
|
|
@ -486,9 +503,12 @@ void Ctrl::Create(HWND parent, DWORD style, DWORD exstyle, bool savebits, int sh
|
|||
inloop = false;
|
||||
|
||||
ASSERT(top->hwnd);
|
||||
|
||||
UseImmersiveDarkModeForWindowBorder();
|
||||
|
||||
::MoveWindow(top->hwnd, r.left, r.top, r.Width(), r.Height(), false); // To avoid "black corners" artifact effect
|
||||
::ShowWindow(top->hwnd, visible ? show : SW_HIDE);
|
||||
// ::UpdateWindow(hwnd);
|
||||
|
||||
StateH(OPEN);
|
||||
LLOG(LOG_END << "//Ctrl::Create in " <<UPP::Name(this));
|
||||
RegisterDragDrop(top->hwnd, (LPDROPTARGET) (top->dndtgt = NewUDropTarget(this)));
|
||||
|
|
|
|||
|
|
@ -951,8 +951,12 @@ Size ArrayCtrl::DoPaint(Draw& w, bool sample) {
|
|||
dword st;
|
||||
Color fg, bg;
|
||||
Value q;
|
||||
bool heading = IsHeading(i);
|
||||
const Display& d = GetCellInfo(i, jj, hasfocus0, q, fg, bg, st);
|
||||
if(sample || w.IsPainting(r)) {
|
||||
if(heading)
|
||||
r.right = cw = size.cx;
|
||||
else
|
||||
if(spanwidecells)
|
||||
SpanWideCell(d, q, cm, cw, r, i, j);
|
||||
|
||||
|
|
@ -971,6 +975,8 @@ Size ArrayCtrl::DoPaint(Draw& w, bool sample) {
|
|||
x += cw;
|
||||
if(vertgrid)
|
||||
w.DrawRect(x - 1, r.top, 1, r.Height(), gridcolor);
|
||||
if(heading)
|
||||
break;
|
||||
}
|
||||
if(horzgrid)
|
||||
w.DrawRect(0, r.bottom, size.cx, 1, gridcolor);
|
||||
|
|
@ -2151,6 +2157,14 @@ void ArrayCtrl::AddSeparator()
|
|||
DisableLine(ii);
|
||||
}
|
||||
|
||||
void ArrayCtrl::AddHeading(const Value& v)
|
||||
{
|
||||
int ii = GetCount();
|
||||
Add(v);
|
||||
array.At(ii).heading = true;
|
||||
DisableLine(ii);
|
||||
}
|
||||
|
||||
#define E__Addv(I) Set0(q, I - 1, p##I)
|
||||
#define E__AddF(I) \
|
||||
void ArrayCtrl::Add(__List##I(E__Value)) { \
|
||||
|
|
|
|||
|
|
@ -181,10 +181,11 @@ private:
|
|||
bool select:1;
|
||||
bool enabled:1;
|
||||
bool visible:1;
|
||||
bool heading:1;
|
||||
Color paper;
|
||||
Vector<Value> line;
|
||||
|
||||
Line() { select = false; enabled = true; visible = true; paper = Null; }
|
||||
Line() { select = false; enabled = true; visible = true; heading = false; paper = Null; }
|
||||
};
|
||||
|
||||
static int StdValueCompare(const Value& a, const Value& b) { return Upp::StdValueCompare(a, b); }
|
||||
|
|
@ -501,6 +502,8 @@ public:
|
|||
ValueArray GetArray(int i) const;
|
||||
|
||||
void AddSeparator();
|
||||
void AddHeading(const Value& v);
|
||||
bool IsHeading(int i) const { return i < array.GetCount() && array[i].heading; }
|
||||
|
||||
void Insert(int i);
|
||||
void Insert(int i, int count);
|
||||
|
|
|
|||
|
|
@ -324,6 +324,7 @@ ctrl LabelBox {
|
|||
|
||||
>Base;
|
||||
Text SetLabel ? "Box label" ;
|
||||
Font SetFont = StdFont();
|
||||
|
||||
Paint(w) {
|
||||
sz = GetSize();
|
||||
|
|
|
|||
|
|
@ -1036,7 +1036,10 @@ void FileSel::AddName(Vector<String>& fn, String& f) {
|
|||
f = TrimDot(f);
|
||||
if(f[0] == '\"' && f.GetCount() > 2)
|
||||
f = f.Mid(1, f.GetCount() - 2);
|
||||
if(f.Find('.') < 0) {
|
||||
int q = f.ReverseFind('.');
|
||||
if(q < 0 || Filter(f.Mid(q + 1), // "(file.xxx)" should add extension too, allow just some
|
||||
[](int c) { return IsAlNum(c) || findarg(c, '_', '-') >= 0 ? 0 : c; }
|
||||
).GetCount()) {
|
||||
String t = GetMask();
|
||||
int q = t.Find('.');
|
||||
if(q >= 0 && IsAlNum(t[q + 1])) {
|
||||
|
|
@ -1305,8 +1308,12 @@ void FileSel::Open() {
|
|||
}
|
||||
}
|
||||
}
|
||||
if(mode != SELECTDIR) Finish();
|
||||
if(mode != SELECTDIR)
|
||||
Finish();
|
||||
}
|
||||
else
|
||||
if(mode == SAVEAS)
|
||||
Finish();
|
||||
}
|
||||
|
||||
String DirectoryUp(String& dir, bool basedir)
|
||||
|
|
|
|||
|
|
@ -191,31 +191,22 @@ bool FileSelNative::Execute(bool open, const char *dlgtitle) {
|
|||
ofn.lpstrInitialDir = W32(activedir);
|
||||
ofn.lpfnHook = sCenterHook;
|
||||
int bufsize = ofn.nMaxFile = (multi ? 32000 : _MAX_PATH);
|
||||
Buffer<char16> buffer(bufsize);
|
||||
*(ofn.lpstrFile = buffer) = 0;
|
||||
if(!filename.IsEmpty())
|
||||
{
|
||||
String out;
|
||||
for(int i = 0; i < filename.GetCount(); i++)
|
||||
{
|
||||
if(*ofn.lpstrInitialDir == 0 && FindFile().Search(AppendFileName(GetFileDirectory(filename[i]), "*")))
|
||||
ofn.lpstrInitialDir = W32(GetFileDirectory(filename[i]));
|
||||
if(!open || FileExists(filename[i]))
|
||||
{
|
||||
String fn = GetFileName(filename[i]);
|
||||
if(!IsNull(fn))
|
||||
{
|
||||
if(multi && fn.Find(' ') >= 0)
|
||||
out << W32(String() << '\"' << fn << '\"');
|
||||
else
|
||||
out << W32(fn);
|
||||
out.Cat(0);
|
||||
}
|
||||
}
|
||||
Buffer<char16> buffer(bufsize, 0);
|
||||
if(filename.GetCount()) {
|
||||
if(*ofn.lpstrInitialDir == 0 && FindFile().Search(AppendFileName(GetFileDirectory(filename[0]), "*")))
|
||||
ofn.lpstrInitialDir = W32(GetFileDirectory(filename[0]));
|
||||
if(!open || FileExists(filename[0])) {
|
||||
String out;
|
||||
String fn = GetFileName(filename[0]);
|
||||
if(multi && fn.Find(' ') >= 0)
|
||||
out << String() << '\"' << fn << '\"';
|
||||
else
|
||||
out << fn;
|
||||
Vector<char16> w32 = ToSystemCharsetW(out);
|
||||
memcpy(buffer, w32, min(bufsize - 1, int(w32.GetCount() * sizeof(wchar))));
|
||||
}
|
||||
int l = min(out.GetLength(), bufsize - 1);
|
||||
memcpy(buffer, out, l + 1);
|
||||
}
|
||||
ofn.lpstrFile = buffer;
|
||||
|
||||
if(dlgtitle)
|
||||
ofn.lpstrTitle = W32(dlgtitle);
|
||||
|
|
|
|||
|
|
@ -1889,6 +1889,17 @@ onst]_[_^ValueArray^ ValueArray][@(0.0.255) `&]_[*@3 va])&]
|
|||
nt]_[*@3 i])_[@(0.0.255) const]&]
|
||||
[s2; Returns a row as ValueArray.&]
|
||||
[s3; &]
|
||||
[s4;%- &]
|
||||
[s5;:Upp`:`:ArrayCtrl`:`:AddSeparator`(`):%- [@(0.0.255) void]_[* AddSeparator]()&]
|
||||
[s2; Adds separator line.&]
|
||||
[s3;%- &]
|
||||
[s4;%- &]
|
||||
[s5;:Upp`:`:ArrayCtrl`:`:AddHeading`(const Upp`:`:Value`&`):%- [@(0.0.255) void]_[* AddHe
|
||||
ading]([@(0.0.255) const]_[_^Upp`:`:Value^ Value][@(0.0.255) `&]_[*@3 v])&]
|
||||
[s2; Adds a special disabled line where the first column is spanned
|
||||
over all other values in the line. Useful for inserting informative
|
||||
titles.&]
|
||||
[s3; &]
|
||||
[s4; &]
|
||||
[s5;:ArrayCtrl`:`:Set`(int`,const VectorMap`<String`,Value`>`&`): [@(0.0.255) void]_[* Se
|
||||
t]([@(0.0.255) int]_[*@3 i], [@(0.0.255) const]_[_^VectorMap^ VectorMap]<[_^String^ String],
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
namespace Upp;
|
||||
|
||||
ctrl DropGrid {
|
||||
group "Input fields";
|
||||
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
namespace Upp {
|
||||
|
||||
double Distance(Pointf X, Pointf A, Pointf B, double *arg)
|
||||
{
|
||||
{ // distance from line segment (not line!)
|
||||
Pointf AB = B - A;
|
||||
Pointf AX = X - A;
|
||||
double ab2 = Squared(AB);
|
||||
|
|
|
|||
|
|
@ -1556,6 +1556,7 @@ class GridCtrl : public Ctrl
|
|||
void DoGoPageUp();
|
||||
void DoGoPageDn();
|
||||
void DoFind();
|
||||
void DoPaste();
|
||||
|
||||
void StdMenuBar(Bar &bar);
|
||||
void StdToolBar(Bar &bar);
|
||||
|
|
@ -1774,7 +1775,6 @@ class GridCtrl : public Ctrl
|
|||
void PasteCallbacks(bool new_row);
|
||||
void Paste(int mode = 0);
|
||||
void DoCopy();
|
||||
void DoPaste();
|
||||
void DoPasteInsertedRows();
|
||||
void DoPasteAppendedRows();
|
||||
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
namespace Upp;
|
||||
|
||||
fn PaintVertSb(w, r)
|
||||
{
|
||||
PaintVScrollBar(w, r);
|
||||
|
|
|
|||
|
|
@ -2629,7 +2629,7 @@ TabBar::Style& TabBar::Style::Variant1Crosses()
|
|||
crosses[0] = TabBarImg::VARIANT1_CR0();
|
||||
crosses[1] = TabBarImg::VARIANT1_CR1();
|
||||
crosses[2] = TabBarImg::VARIANT1_CR2();
|
||||
return *this;
|
||||
return *this;
|
||||
}
|
||||
|
||||
TabBar::Style& TabBar::Style::Variant2Crosses()
|
||||
|
|
@ -2637,7 +2637,15 @@ TabBar::Style& TabBar::Style::Variant2Crosses()
|
|||
crosses[0] = TabBarImg::VARIANT2_CR0();
|
||||
crosses[1] = TabBarImg::VARIANT2_CR1();
|
||||
crosses[2] = TabBarImg::VARIANT2_CR2();
|
||||
return *this;
|
||||
return *this;
|
||||
}
|
||||
|
||||
TabBar::Style& TabBar::Style::Variant3Crosses()
|
||||
{
|
||||
crosses[0] = TabBarImg::VARIANT3_CR0();
|
||||
crosses[1] = TabBarImg::VARIANT3_CR1();
|
||||
crosses[2] = TabBarImg::VARIANT3_CR2();
|
||||
return *this;
|
||||
}
|
||||
|
||||
TabBar::Style& TabBar::Style::GroupSeparators(Value horz, Value vert)
|
||||
|
|
@ -2767,7 +2775,7 @@ CH_STYLE(TabBar, Style, StyleDefault)
|
|||
Assign(TabCtrl::StyleDefault());
|
||||
#ifdef PLATFORM_WIN32
|
||||
if(IsWinVista())
|
||||
Variant2Crosses();
|
||||
Variant3Crosses();
|
||||
else
|
||||
DefaultCrosses();
|
||||
#else
|
||||
|
|
|
|||
|
|
@ -109,6 +109,7 @@ public:
|
|||
Style& DefaultCrosses();
|
||||
Style& Variant1Crosses();
|
||||
Style& Variant2Crosses();
|
||||
Style& Variant3Crosses();
|
||||
|
||||
Style& DefaultGroupSeparators();
|
||||
Style& GroupSeparators(Value horz, Value vert);
|
||||
|
|
|
|||
|
|
@ -1,5 +1,8 @@
|
|||
PREMULTIPLIED
|
||||
IMAGE_ID(CHK)
|
||||
IMAGE_ID(VARIANT3_CR0)
|
||||
IMAGE_ID(VARIANT3_CR1)
|
||||
IMAGE_ID(VARIANT3_CR2)
|
||||
IMAGE_ID(VARIANT2_CR0)
|
||||
IMAGE_ID(VARIANT2_CR1)
|
||||
IMAGE_ID(VARIANT2_CR2)
|
||||
|
|
@ -15,87 +18,91 @@ IMAGE_ID(SEPV)
|
|||
IMAGE_ID(STSEP)
|
||||
|
||||
IMAGE_BEGIN_DATA
|
||||
IMAGE_DATA(120,156,237,88,9,80,84,87,22,253,66,98,17,116,198,76,220,202,109,36,169,44,53,53,149,84,172,169,26,205,132,152)
|
||||
IMAGE_DATA(145,177,45,209,128,18,67,38,152,168,84,18,84,118,6,16,104,161,101,199,37,162,19,77,212,196,24,23,22,17,131,34)
|
||||
IMAGE_DATA(42,174,200,174,8,136,162,178,116,7,24,100,7,69,4,70,5,98,230,204,189,143,254,8,157,238,198,74,202,37,83,243)
|
||||
IMAGE_DATA(168,83,247,221,123,207,249,247,221,247,223,231,127,144,204,36,51,233,23,14,123,2,6,201,201,121,104,99,186,57,251,126)
|
||||
IMAGE_DATA(121,24,200,233,106,116,115,186,28,125,57,227,227,183,244,243,184,71,122,122,58,30,4,250,116,131,13,67,186,234,234,106)
|
||||
IMAGE_DATA(163,120,82,116,133,133,133,70,241,107,215,253,156,251,254,200,198,255,31,142,39,247,225,136,139,139,27,244,208,49,231,215)
|
||||
IMAGE_DATA(172,123,16,232,234,30,217,120,18,30,142,224,224,96,60,8,244,233,6,59,116,134,116,229,229,229,70,241,36,232,28,28)
|
||||
IMAGE_DATA(28,144,146,146,98,20,204,249,53,235,30,4,186,186,71,54,244,61,28,25,233,105,56,125,234,132,81,164,167,157,26,176)
|
||||
IMAGE_DATA(232,172,204,116,168,203,75,81,85,249,61,42,43,52,122,193,185,239,53,229,96,110,111,157,211,184,116,177,16,151,139,139)
|
||||
IMAGE_DATA(80,124,233,130,81,200,156,180,211,39,4,88,119,177,168,64,160,232,66,190,200,201,126,127,92,42,42,20,220,172,204,51)
|
||||
IMAGE_DATA(3,116,172,225,209,211,221,141,210,146,43,208,168,203,250,222,54,204,145,145,153,145,134,212,212,195,184,64,252,194,194,243)
|
||||
IMAGE_DATA(40,34,173,161,145,159,127,14,153,84,167,160,32,15,167,169,214,193,164,253,40,56,127,14,231,207,229,34,239,108,142,168)
|
||||
IMAGE_DATA(163,59,138,46,20,224,72,74,50,142,29,61,44,144,146,124,0,251,19,247,34,239,92,14,206,157,205,22,184,122,165,248)
|
||||
IMAGE_DATA(39,58,174,113,226,248,81,156,58,121,140,238,199,113,28,60,176,31,241,113,123,4,63,55,39,19,103,115,179,208,213,213)
|
||||
IMAGE_DATA(165,119,157,242,94,164,159,57,133,164,239,246,33,102,207,78,193,207,201,206,16,57,121,20,22,156,167,120,118,159,207,247)
|
||||
IMAGE_DATA(139,53,12,94,99,204,238,157,200,201,202,64,54,221,207,83,39,142,137,126,217,114,31,108,83,143,164,224,240,161,131,56)
|
||||
IMAGE_DATA(125,242,56,50,206,156,70,38,157,171,239,18,19,144,176,55,86,212,63,147,118,18,199,104,111,143,30,57,132,212,163,41)
|
||||
IMAGE_DATA(162,31,238,133,227,156,151,235,241,61,136,139,221,45,206,204,190,132,56,225,203,57,182,236,243,186,179,179,210,7,224,80)
|
||||
IMAGE_DATA(114,210,128,51,154,16,31,43,250,213,135,3,73,137,2,123,227,99,250,52,151,244,61,28,65,129,74,40,3,252,141,34)
|
||||
IMAGE_DATA(80,25,48,160,176,42,40,16,235,215,175,195,198,13,209,216,96,0,156,139,142,94,15,230,202,117,162,34,35,176,38,42)
|
||||
IMAGE_DATA(18,81,81,17,70,33,115,148,74,127,1,214,69,70,134,9,68,68,132,137,92,100,68,120,95,236,62,194,5,151,107,14)
|
||||
IMAGE_DATA(208,145,70,126,229,111,136,254,12,91,183,124,217,231,51,71,70,80,144,18,126,126,62,162,70,68,68,168,208,26,250,116)
|
||||
IMAGE_DATA(8,11,11,33,126,32,217,80,81,203,203,211,3,97,161,33,8,13,9,22,248,98,243,166,159,104,162,169,182,175,143,55)
|
||||
IMAGE_DATA(252,124,125,4,124,188,189,224,225,225,138,208,208,85,8,9,81,33,36,88,133,205,155,62,215,171,243,247,247,69,64,128)
|
||||
IMAGE_DATA(159,184,31,94,94,30,112,117,113,22,154,224,224,32,161,203,202,202,210,187,78,121,47,2,3,3,224,233,233,6,103,231)
|
||||
IMAGE_DATA(165,8,94,165,194,42,85,160,200,221,223,151,245,88,183,118,77,159,207,247,43,112,101,0,65,41,214,232,188,140,116,170)
|
||||
IMAGE_DATA(160,222,235,209,58,184,95,127,63,95,209,71,128,191,95,95,63,43,105,125,172,13,34,157,167,135,27,220,92,93,122,235)
|
||||
IMAGE_DATA(211,25,226,189,245,245,213,246,79,115,249,108,113,94,174,199,247,192,197,101,153,56,51,110,110,46,194,23,57,90,191,184)
|
||||
IMAGE_DATA(46,249,188,6,149,106,32,188,189,61,7,156,81,174,203,253,234,3,175,157,225,234,234,220,167,49,209,247,112,168,63,89)
|
||||
IMAGE_DATA(134,18,27,59,163,40,251,112,201,128,194,26,23,119,220,204,57,143,142,146,239,209,113,85,173,31,148,187,149,127,17,26)
|
||||
IMAGE_DATA(103,55,161,45,119,90,142,134,152,36,52,38,30,65,67,66,74,47,226,15,221,159,239,213,130,230,141,251,14,147,61,140)
|
||||
IMAGE_DATA(82,251,133,184,58,223,30,245,49,201,168,219,177,79,160,102,107,44,241,14,161,118,251,94,212,126,147,128,186,111,19,5)
|
||||
IMAGE_DATA(196,156,57,187,147,80,190,220,29,37,243,223,35,221,65,202,145,102,91,44,254,93,117,13,63,116,221,165,235,30,34,63)
|
||||
IMAGE_DATA(6,93,183,218,5,234,118,145,126,215,126,212,237,57,0,181,147,43,206,218,206,19,126,237,246,56,212,197,29,64,247,221)
|
||||
IMAGE_DATA(59,248,225,135,30,244,144,189,123,227,134,152,51,170,190,218,131,10,247,85,168,219,178,27,69,75,157,145,98,61,7,245)
|
||||
IMAGE_DATA(95,199,161,230,203,157,168,222,180,3,37,187,99,209,117,251,182,120,91,201,200,138,90,143,34,75,27,104,222,122,31,21)
|
||||
IMAGE_DATA(150,239,33,109,142,29,246,40,102,161,225,243,109,168,137,222,76,216,132,107,171,163,113,179,190,30,119,239,220,21,232,104)
|
||||
IMAGE_DATA(107,67,233,66,39,212,78,167,126,20,14,104,38,28,182,182,197,38,43,43,52,18,183,38,124,13,106,34,215,162,229,90)
|
||||
IMAGE_DATA(13,90,174,183,226,70,107,27,26,235,27,112,157,230,215,27,155,113,195,201,7,183,20,246,232,176,118,64,226,236,57,8)
|
||||
IMAGE_DATA(159,110,137,70,165,10,53,126,74,84,249,4,160,164,168,24,53,196,63,25,20,142,212,191,47,70,85,245,53,84,16,170)
|
||||
IMAGE_DATA(156,60,209,174,120,31,157,164,251,118,166,2,33,111,91,162,217,213,3,181,116,63,75,237,28,145,168,176,197,17,229,42)
|
||||
IMAGE_DATA(92,182,156,39,214,150,186,100,25,246,47,90,138,58,43,59,180,91,127,208,171,83,40,176,118,158,13,170,236,22,161,198)
|
||||
IMAGE_DATA(110,9,46,189,229,128,252,55,28,80,244,166,61,237,129,3,234,103,56,160,213,234,125,52,19,218,169,175,91,132,78,235)
|
||||
IMAGE_DATA(133,136,154,49,67,156,153,47,102,205,192,245,247,236,208,228,98,139,122,15,91,52,123,217,162,213,219,22,237,62,182,184)
|
||||
IMAGE_DATA(189,194,6,119,100,248,206,195,129,5,138,1,103,52,204,90,129,111,230,42,240,245,220,153,248,218,102,38,182,147,221,97)
|
||||
IMAGE_DATA(107,133,111,109,122,177,139,230,81,111,207,48,254,112,156,127,222,2,153,146,100,20,185,163,71,15,40,156,63,124,20,154)
|
||||
IMAGE_DATA(226,147,113,51,171,0,55,211,243,245,131,114,215,147,79,32,223,124,164,208,230,89,88,160,194,39,28,149,170,13,168,92)
|
||||
IMAGE_DATA(249,89,47,2,214,221,159,43,181,224,121,80,52,217,104,100,155,155,35,139,234,87,248,172,134,218,57,72,160,108,137,47)
|
||||
IMAGE_DATA(241,214,161,220,73,73,15,65,32,212,46,42,1,49,167,188,230,31,225,200,51,27,133,108,89,71,185,50,71,127,116,22)
|
||||
IMAGE_DATA(151,225,63,221,61,226,250,101,142,126,232,185,217,38,160,241,8,129,198,51,20,26,239,40,228,155,142,68,18,233,42,233)
|
||||
IMAGE_DATA(26,234,101,74,84,4,172,198,61,58,212,60,88,219,221,212,210,247,217,113,249,83,63,92,26,59,13,149,75,124,112,226)
|
||||
IMAGE_DATA(233,103,177,145,116,85,206,43,161,118,244,70,217,34,119,228,210,225,147,181,242,72,152,61,31,39,137,119,145,80,76,216)
|
||||
IMAGE_DATA(73,240,35,84,127,232,4,245,130,197,80,191,187,8,229,214,11,208,122,173,154,30,192,123,2,157,109,237,56,39,153,161)
|
||||
IMAGE_DATA(146,175,79,168,39,252,147,176,144,80,99,253,46,212,86,115,160,158,101,131,6,77,5,26,91,90,209,66,61,213,92,171)
|
||||
IMAGE_DATA(69,19,205,155,234,26,208,108,246,18,218,136,219,73,8,37,204,32,212,78,153,6,205,31,167,224,202,75,175,33,55,45)
|
||||
IMAGE_DATA(19,26,226,127,243,103,43,124,65,185,171,229,26,20,19,74,204,39,163,131,252,219,4,79,130,37,215,30,251,123,84,140)
|
||||
IMAGE_DATA(28,135,60,154,135,17,62,127,253,13,113,62,120,109,95,74,191,65,184,52,92,204,251,235,230,142,26,137,171,100,53,132)
|
||||
IMAGE_DATA(51,132,84,130,188,7,220,207,117,109,79,172,105,211,234,102,105,255,253,187,152,108,19,161,238,57,226,78,32,222,100,226)
|
||||
IMAGE_DATA(191,64,220,23,37,116,189,34,161,91,198,75,18,214,232,252,75,121,58,157,29,23,138,45,35,44,39,56,19,220,8,30)
|
||||
IMAGE_DATA(218,117,121,19,20,253,53,79,194,31,228,191,116,12,25,50,228,105,50,38,58,97,19,109,220,160,198,220,220,252,21,51)
|
||||
IMAGE_DATA(51,179,231,251,105,77,216,231,184,33,173,137,137,137,233,248,241,227,95,27,55,110,220,52,230,50,143,45,251,28,231,188)
|
||||
IMAGE_DATA(161,154,35,70,140,120,118,226,196,137,175,51,151,106,252,129,45,251,28,31,172,71,226,60,71,220,191,76,154,52,201,146)
|
||||
IMAGE_DATA(45,251,131,105,228,126,38,76,152,192,186,105,108,117,250,53,168,145,215,54,102,204,152,177,242,154,141,105,169,239,167,198)
|
||||
IMAGE_DATA(142,29,59,165,127,63,114,191,28,231,188,62,29,237,159,201,168,81,163,70,235,238,1,251,28,231,252,3,244,249,112,198)
|
||||
IMAGE_DATA(255,194,195,65,99,52,97,152,78,108,152,54,110,80,67,7,230,59,186,1,155,250,105,135,177,207,113,67,90,83,83,83)
|
||||
IMAGE_DATA(139,173,91,183,222,89,188,120,113,155,86,59,154,45,251,28,231,188,161,130,142,142,142,59,227,227,227,193,92,11,11,139)
|
||||
IMAGE_DATA(84,182,236,115,124,176,6,137,19,163,82,169,176,98,197,10,176,101,127,48,141,220,143,187,187,123,79,100,100,36,216,234)
|
||||
IMAGE_DATA(244,107,80,35,175,45,45,45,237,95,242,154,141,105,233,16,143,167,235,55,247,239,71,238,151,227,156,55,80,239,217,216)
|
||||
IMAGE_DATA(216,216,139,186,123,192,62,199,57,255,0,125,62,156,241,48,30,142,223,73,210,43,179,37,41,238,83,73,170,243,162,215)
|
||||
IMAGE_DATA(20,91,246,199,72,210,159,12,105,166,72,146,55,189,226,238,28,93,184,16,149,27,55,162,101,215,46,97,79,125,252,49)
|
||||
IMAGE_DATA(214,208,231,215,155,146,180,90,87,51,77,146,66,119,79,159,14,205,186,117,104,222,190,29,141,91,182,160,137,192,150,253)
|
||||
IMAGE_DATA(186,109,219,192,121,230,201,154,17,146,244,34,189,70,239,177,230,94,15,253,221,208,209,129,90,170,83,183,118,173,176,236)
|
||||
IMAGE_DATA(115,156,243,204,99,62,235,184,254,126,250,238,189,26,24,136,86,141,6,63,254,248,35,186,219,219,81,77,58,182,236,115)
|
||||
IMAGE_DATA(156,243,204,147,215,107,47,73,217,217,11,22,224,178,155,27,146,9,13,165,165,130,43,131,125,142,115,158,121,204,103,221)
|
||||
IMAGE_DATA(135,146,116,241,236,220,185,40,251,232,35,156,37,36,58,57,161,167,171,75,104,216,178,207,113,145,39,30,243,89,55,95)
|
||||
IMAGE_DATA(146,142,157,156,58,21,165,239,188,131,203,246,246,184,77,127,19,177,230,118,103,103,175,37,159,227,156,103,30,243,89,247)
|
||||
IMAGE_DATA(186,36,121,110,31,63,30,197,179,102,225,78,75,139,224,86,230,229,193,203,210,82,88,246,57,206,121,230,49,159,117,244)
|
||||
IMAGE_DATA(122,29,190,84,146,90,246,190,252,50,58,154,154,80,145,155,139,213,175,190,138,29,4,182,236,115,156,243,204,99,190,124)
|
||||
IMAGE_DATA(47,38,73,210,223,220,37,169,39,146,62,209,215,79,158,140,20,66,142,214,178,207,113,206,51,79,231,214,15,161,216,204)
|
||||
IMAGE_DATA(79,36,169,102,245,208,161,216,67,159,75,241,195,134,9,203,62,159,55,206,51,79,223,89,163,87,209,208,23,36,201,246)
|
||||
IMAGE_DATA(175,146,180,153,46,252,21,91,246,57,62,128,104,38,61,35,61,69,45,154,74,6,191,6,30,214,152,74,175,218,15,12)
|
||||
IMAGE_DATA(37,233,55,205,84,250,45,252,179,243,15,101,60,67,219,101,170,221,174,199,56,166,246,131,222,193,27,43,227,209,45,75)
|
||||
IMAGE_DATA(103,60,67,63,143,127,40,232,143,21,223,21,189,214,208,224,124,70,70,175,253,37,215,121,184,227,191,221,100,181,99,0)
|
||||
IMAGE_END_DATA(2656, 14)
|
||||
IMAGE_DATA(120,156,237,89,9,80,85,231,21,190,66,146,33,152,214,212,53,104,172,36,147,101,58,157,100,226,116,166,154,134,216,74)
|
||||
IMAGE_DATA(197,9,26,80,98,72,131,137,202,36,65,195,78,1,89,132,39,59,46,17,109,52,81,19,99,92,88,68,12,138,168,24)
|
||||
IMAGE_DATA(23,100,87,4,68,49,178,188,23,160,200,14,138,8,84,5,98,250,245,156,31,46,62,94,222,123,16,82,12,182,57,204)
|
||||
IMAGE_DATA(55,231,158,115,190,239,254,255,249,255,255,114,47,131,100,36,25,73,63,209,108,9,24,160,38,215,209,155,211,172,217,170)
|
||||
IMAGE_DATA(213,161,163,166,169,209,172,105,114,180,213,244,219,175,233,231,1,183,129,22,69,151,105,91,180,193,46,164,58,239,199,46)
|
||||
IMAGE_DATA(190,174,141,30,14,221,80,230,57,212,117,25,234,62,140,88,75,255,229,225,248,229,225,208,163,209,151,211,180,255,143,135)
|
||||
IMAGE_DATA(227,137,39,158,120,121,48,208,212,152,152,152,12,10,178,246,199,104,212,181,234,58,186,13,198,142,29,235,168,201,227,28)
|
||||
IMAGE_DATA(215,116,233,228,186,186,86,91,78,83,167,201,211,166,209,165,83,215,234,154,247,127,83,55,148,121,14,117,93,134,186,15)
|
||||
IMAGE_DATA(131,197,80,206,140,182,51,250,163,206,245,72,120,115,164,165,165,97,48,208,166,27,200,116,233,170,170,170,244,98,164,232)
|
||||
IMAGE_DATA(10,10,10,244,226,65,215,13,101,223,239,155,253,242,112,140,220,135,35,54,54,118,192,67,199,156,7,89,55,24,104,234)
|
||||
IMAGE_DATA(238,155,141,132,135,35,40,40,8,131,129,54,221,64,135,78,151,174,172,172,76,47,70,130,206,206,206,14,201,201,201,122)
|
||||
IMAGE_DATA(193,156,7,89,55,24,104,234,238,155,105,123,56,210,211,82,113,250,212,9,189,72,75,61,213,111,210,153,25,105,80,150)
|
||||
IMAGE_DATA(149,160,178,226,91,84,148,171,180,130,107,223,170,202,192,220,158,113,78,227,210,197,2,92,46,42,68,209,165,11,122,33)
|
||||
IMAGE_DATA(115,82,79,159,16,96,221,197,194,124,129,194,11,121,162,38,199,234,184,84,88,32,184,153,25,103,250,233,88,195,214,221)
|
||||
IMAGE_DATA(213,133,146,226,111,160,82,150,246,189,109,152,35,35,35,61,21,41,41,71,112,129,248,5,5,231,81,72,90,93,150,151)
|
||||
IMAGE_DATA(119,14,25,52,78,126,126,46,78,211,88,135,18,15,32,255,252,57,156,63,151,131,220,179,217,98,28,77,43,188,144,143)
|
||||
IMAGE_DATA(163,201,73,56,126,236,136,64,114,210,65,28,72,216,135,220,115,217,56,119,54,75,224,202,55,69,63,208,241,24,39,190)
|
||||
IMAGE_DATA(62,134,83,39,143,211,126,124,141,67,7,15,32,46,118,175,224,231,100,103,224,108,78,38,58,59,59,181,206,83,94,139)
|
||||
IMAGE_DATA(180,51,167,144,248,213,126,68,239,221,37,248,217,89,233,162,38,91,65,254,121,202,103,245,197,188,95,172,97,240,28,163)
|
||||
IMAGE_DATA(247,236,66,118,102,58,178,104,63,79,157,56,46,250,101,207,125,176,79,57,154,140,35,135,15,225,244,201,175,145,126,230)
|
||||
IMAGE_DATA(52,50,232,92,125,149,16,143,248,125,49,98,252,51,169,39,113,156,214,246,216,209,195,72,57,150,44,250,225,94,56,207)
|
||||
IMAGE_DATA(117,121,60,222,131,216,152,61,226,204,236,143,143,21,177,92,99,207,49,207,59,43,51,173,31,14,39,37,246,59,163,241)
|
||||
IMAGE_DATA(113,49,162,95,109,56,152,152,32,176,47,46,186,79,115,73,219,195,17,24,224,15,127,63,95,189,8,240,247,235,55,176)
|
||||
IMAGE_DATA(34,48,0,27,54,172,199,166,141,81,216,168,3,92,139,138,218,0,230,202,227,68,70,132,99,109,100,4,34,35,195,245)
|
||||
IMAGE_DATA(66,230,248,251,251,10,176,46,34,34,84,32,60,60,84,212,34,194,195,250,114,247,16,38,184,60,102,63,29,105,228,87)
|
||||
IMAGE_DATA(254,198,168,143,176,109,235,167,125,49,115,100,4,6,250,195,199,199,75,140,17,30,30,34,180,186,62,29,66,67,131,137)
|
||||
IMAGE_DATA(31,64,62,68,140,229,225,238,134,208,144,96,132,4,7,9,124,178,101,243,15,52,81,52,182,183,151,39,124,188,189,4)
|
||||
IMAGE_DATA(188,60,61,224,230,230,140,144,144,213,8,14,86,32,56,72,129,45,155,63,214,170,243,245,245,134,159,159,143,216,15,15)
|
||||
IMAGE_DATA(15,55,56,59,57,10,77,80,80,160,208,101,102,102,106,157,167,188,22,1,1,126,112,119,119,129,163,227,114,4,173,86)
|
||||
IMAGE_DATA(96,181,34,64,212,238,173,203,6,172,95,183,182,47,230,253,10,88,229,71,240,23,115,116,92,65,58,69,96,207,253,104)
|
||||
IMAGE_DATA(30,220,175,175,143,183,232,195,207,215,167,175,159,85,52,63,214,6,146,206,221,205,5,46,206,78,61,227,211,25,226,181)
|
||||
IMAGE_DATA(245,246,238,237,159,174,229,179,197,117,121,60,222,3,39,167,21,226,204,184,184,56,137,88,212,104,254,226,190,20,243,28)
|
||||
IMAGE_DATA(20,138,254,240,244,116,239,119,70,121,92,238,87,27,120,238,12,103,103,199,62,141,129,182,135,67,249,254,10,20,91,217)
|
||||
IMAGE_DATA(232,69,233,59,203,250,13,172,114,114,197,141,236,243,104,47,254,22,237,87,148,218,65,181,155,121,23,161,114,116,17,218)
|
||||
IMAGE_DATA(50,135,15,81,31,157,136,134,132,163,168,143,79,238,65,220,225,123,215,251,122,65,215,13,251,143,144,63,130,18,219,197)
|
||||
IMAGE_DATA(184,178,208,22,117,209,73,168,221,185,95,160,122,91,12,241,14,163,102,199,62,212,124,17,143,218,47,19,4,196,53,115)
|
||||
IMAGE_DATA(246,36,162,236,67,87,20,47,124,147,116,135,168,70,154,237,49,248,87,229,85,124,215,121,135,238,123,152,226,104,116,222)
|
||||
IMAGE_DATA(108,19,168,221,77,250,221,7,80,187,247,32,148,14,206,56,107,189,64,196,53,59,98,81,27,123,16,93,119,110,227,187)
|
||||
IMAGE_DATA(239,186,209,77,254,206,245,235,226,154,81,249,217,94,148,187,174,70,237,214,61,40,92,238,136,100,203,121,168,251,60,22)
|
||||
IMAGE_DATA(213,159,238,66,213,230,157,40,222,19,131,206,91,183,196,219,74,70,102,228,6,20,154,89,65,245,234,91,40,55,123,19)
|
||||
IMAGE_DATA(169,243,108,176,215,98,46,234,63,222,142,234,168,45,132,205,184,186,38,10,55,234,234,112,231,246,29,129,246,214,86,148)
|
||||
IMAGE_DATA(44,118,64,205,44,234,199,194,14,77,132,35,150,214,216,108,110,142,6,226,86,135,173,69,117,196,58,52,95,173,70,243)
|
||||
IMAGE_DATA(181,22,92,111,105,69,67,93,61,174,209,245,181,134,38,92,119,240,194,77,11,91,180,91,218,33,225,181,121,8,155,101)
|
||||
IMAGE_DATA(134,6,127,5,170,125,252,81,233,229,135,226,194,34,84,19,255,100,96,24,82,254,182,20,149,85,87,81,78,168,116,112)
|
||||
IMAGE_DATA(71,155,197,91,232,32,221,151,115,44,16,252,103,51,52,57,187,161,134,246,179,196,198,30,9,22,214,56,234,191,26,151)
|
||||
IMAGE_DATA(205,22,136,185,165,44,91,129,3,75,150,163,214,220,6,109,150,111,247,232,44,44,176,110,129,21,42,109,150,160,218,102)
|
||||
IMAGE_DATA(25,46,189,106,135,188,151,237,80,248,138,45,173,129,29,234,102,219,161,197,252,45,52,17,218,168,175,155,132,14,203,197)
|
||||
IMAGE_DATA(136,156,61,91,156,153,79,230,206,198,181,55,109,208,232,100,141,58,55,107,52,121,88,163,197,211,26,109,94,214,184,181)
|
||||
IMAGE_DATA(210,10,183,101,120,47,192,193,69,22,253,206,104,168,165,5,190,152,111,129,207,231,207,193,231,86,115,176,131,252,78,107)
|
||||
IMAGE_DATA(115,124,105,213,131,221,116,29,249,231,217,250,31,142,243,79,153,34,67,146,244,34,103,194,132,126,3,231,61,54,30,141)
|
||||
IMAGE_DATA(113,73,184,145,153,143,27,105,121,218,65,181,107,73,39,144,103,60,78,104,115,77,77,81,238,21,134,10,197,70,84,172)
|
||||
IMAGE_DATA(250,168,7,126,235,239,93,251,247,130,175,3,163,200,71,33,203,216,24,153,52,126,185,215,26,40,29,3,5,74,151,121)
|
||||
IMAGE_DATA(19,111,61,202,28,252,233,33,8,128,210,73,33,32,174,169,174,250,123,24,114,141,198,35,75,214,81,173,212,222,23,29)
|
||||
IMAGE_DATA(69,165,248,119,87,183,184,127,169,189,15,186,111,180,10,168,220,130,161,114,15,129,202,51,18,121,134,227,144,72,186,10)
|
||||
IMAGE_DATA(186,135,114,133,63,202,253,214,224,46,29,106,54,214,118,53,54,247,125,118,92,254,192,7,151,38,205,68,197,50,47,156)
|
||||
IMAGE_DATA(120,248,113,108,34,93,165,227,42,40,237,61,81,186,196,21,57,116,248,100,173,108,241,175,45,196,73,226,93,36,20,17)
|
||||
IMAGE_DATA(118,17,124,8,85,239,56,64,185,104,41,148,111,44,65,153,229,34,180,92,173,162,7,240,174,64,71,107,27,206,73,70)
|
||||
IMAGE_DATA(168,224,251,19,234,8,255,32,44,38,84,91,190,1,165,249,60,40,231,90,161,94,85,142,134,230,22,52,83,79,213,87)
|
||||
IMAGE_DATA(107,208,72,215,141,181,245,104,50,122,22,173,196,237,32,132,16,102,19,106,166,207,132,234,247,211,241,205,179,47,34,39)
|
||||
IMAGE_DATA(53,3,42,226,127,241,71,115,124,66,181,43,101,42,20,17,138,141,167,161,157,226,91,4,119,130,25,143,61,233,183,40)
|
||||
IMAGE_DATA(31,103,130,92,186,14,37,124,252,210,203,226,124,240,220,62,149,126,133,48,233,49,113,173,174,155,63,126,28,174,144,87)
|
||||
IMAGE_DATA(17,206,16,82,8,242,26,112,63,215,122,123,98,77,107,175,110,110,239,255,74,150,146,111,36,212,142,37,238,20,226,77)
|
||||
IMAGE_DATA(35,254,211,196,125,70,66,231,243,18,186,100,60,43,97,173,198,255,87,102,209,217,113,162,220,10,194,135,4,71,130,11)
|
||||
IMAGE_DATA(193,173,119,94,158,4,11,117,205,72,248,131,252,167,218,168,81,163,30,38,103,160,145,54,232,205,235,212,24,27,27,63)
|
||||
IMAGE_DATA(111,100,100,244,148,154,214,128,99,206,235,210,26,24,24,24,78,158,60,249,69,19,19,147,153,204,101,30,123,142,57,207)
|
||||
IMAGE_DATA(117,93,99,142,25,51,230,241,39,159,124,242,37,230,210,24,191,99,207,49,231,7,234,145,56,99,137,251,167,169,83,167)
|
||||
IMAGE_DATA(154,177,231,120,32,141,220,207,148,41,83,88,55,147,189,70,191,58,53,242,220,38,78,156,56,73,158,179,62,45,245,253)
|
||||
IMAGE_DATA(208,164,73,147,166,171,247,35,247,203,121,174,107,211,209,250,25,140,31,63,126,130,230,26,112,204,121,174,15,162,207,225)
|
||||
IMAGE_DATA(177,255,133,135,131,108,2,97,180,70,110,116,111,94,167,134,14,204,87,180,1,155,213,180,163,57,230,188,46,173,161,161)
|
||||
IMAGE_DATA(161,233,182,109,219,110,47,93,186,180,181,87,59,129,61,199,156,231,186,174,1,237,237,237,119,197,197,197,129,185,166,166)
|
||||
IMAGE_DATA(166,41,236,57,230,252,64,13,18,39,90,161,80,96,229,202,149,96,207,241,64,26,185,31,87,87,215,238,136,136,8,176)
|
||||
IMAGE_DATA(215,232,87,167,70,158,91,106,106,234,63,229,57,235,211,210,33,158,76,247,111,82,239,71,238,151,243,92,215,49,222,227)
|
||||
IMAGE_DATA(49,49,49,23,53,215,128,99,206,115,125,16,125,14,143,13,199,195,241,27,73,122,254,53,73,138,253,64,146,106,61,232)
|
||||
IMAGE_DATA(53,197,158,227,137,146,244,7,93,154,233,146,228,73,175,184,219,199,22,47,70,197,166,77,104,222,189,91,248,83,239,189)
|
||||
IMAGE_DATA(135,181,244,249,245,138,36,173,209,212,204,148,164,144,61,179,102,65,181,126,61,154,118,236,64,195,214,173,104,36,176,231)
|
||||
IMAGE_DATA(184,118,251,118,112,157,121,178,102,140,36,61,67,175,209,187,172,185,219,77,127,55,180,183,163,134,198,169,93,183,78,120)
|
||||
IMAGE_DATA(142,57,207,117,230,49,159,117,60,254,1,250,238,189,18,16,128,22,149,10,223,127,255,61,186,218,218,80,69,58,246,28)
|
||||
IMAGE_DATA(115,158,235,204,147,231,107,43,73,89,89,139,22,225,178,139,11,146,8,245,37,37,130,43,131,99,206,115,157,121,204,103)
|
||||
IMAGE_DATA(221,59,146,116,241,236,252,249,40,125,247,93,156,37,36,56,56,160,187,179,83,104,216,115,204,121,81,39,30,243,89,183)
|
||||
IMAGE_DATA(80,146,142,159,156,49,3,37,175,191,142,203,182,182,184,69,127,19,177,230,86,71,71,143,167,152,243,92,103,30,243,89)
|
||||
IMAGE_DATA(247,146,36,185,239,152,60,25,69,115,231,226,118,115,179,224,86,228,230,194,195,204,76,120,142,57,207,117,230,49,159,117)
|
||||
IMAGE_DATA(244,122,125,108,185,36,53,239,123,238,57,180,55,54,162,60,39,7,107,94,120,1,59,9,236,57,230,60,215,153,199,124)
|
||||
IMAGE_DATA(121,47,166,74,210,95,93,37,169,59,130,62,209,55,76,155,134,100,66,118,175,231,152,243,92,103,158,198,214,143,162,220)
|
||||
IMAGE_DATA(156,247,37,169,122,205,35,143,96,47,125,46,197,141,30,45,60,199,124,222,184,206,60,109,103,141,94,69,143,60,45,73)
|
||||
IMAGE_DATA(214,127,145,164,45,116,227,207,216,115,204,249,126,68,35,233,81,233,33,106,209,80,210,249,53,48,92,54,131,94,181,111)
|
||||
IMAGE_DATA(235,42,210,111,154,25,244,91,120,200,245,97,177,71,105,185,12,123,151,235,103,180,25,106,208,106,188,176,50,238,223,180)
|
||||
IMAGE_DATA(52,236,81,250,249,249,205,130,254,88,241,94,217,227,117,25,215,211,211,123,252,79,185,207,240,218,127,0,152,47,79,170)
|
||||
IMAGE_END_DATA(2784, 17)
|
||||
|
|
|
|||
|
|
@ -379,8 +379,7 @@ Vector<String> CppBuilder::CustomStep(const String& pf, const String& package_,
|
|||
if(p.Id("exclude_path")) {
|
||||
ExtExclude(p, packageFolder, include_path, flags);
|
||||
}
|
||||
else {
|
||||
p.PassId("includes");
|
||||
if(p.Id("includes")) {
|
||||
bool apply = CheckImportCondition(p, flags);
|
||||
Vector<String> e = ReadPatterns(p);
|
||||
if(apply) {
|
||||
|
|
|
|||
|
|
@ -191,12 +191,18 @@ void InstantSetup()
|
|||
bins.At(4) = GetExeDirFile(x64 ? "bin/mysql/lib64" : "bin/mysql/lib32");
|
||||
|
||||
incs.At(0) = GetExeDirFile("bin/SDL2/include");
|
||||
incs.At(1) = GetExeDirFile(x64 ? "bin/pgsql/x64/include" : "bin/pgsql/x86/include");
|
||||
incs.At(2) = GetExeDirFile(x64 ? "bin/mysql/include" : "bin/mysql/include");
|
||||
|
||||
libs.At(0) = GetExeDirFile(x64 ? "bin/SDL2/lib/x64" : "bin/SDL2/lib/x86");
|
||||
|
||||
incs.At(1) = GetExeDirFile(x64 ? "bin/pgsql/x64/include" : "bin/pgsql/x86/include");
|
||||
libs.At(1) = GetExeDirFile(x64 ? "bin/pgsql/x64/lib" : "bin/pgsql/x86/lib");
|
||||
|
||||
incs.At(2) = GetExeDirFile(x64 ? "bin/mysql/include" : "bin/mysql/include");
|
||||
libs.At(2) = GetExeDirFile(x64 ? "bin/mysql/lib64" : "bin/mysql/lib32");
|
||||
|
||||
if(x64) {
|
||||
incs.At(3) = GetExeDirFile("bin/llvm");
|
||||
libs.At(3) = GetExeDirFile("bin/llvm");
|
||||
}
|
||||
|
||||
bm.GetAdd("PATH") = Join(bins, ";");
|
||||
bm.GetAdd("INCLUDE") = Join(incs, ";");
|
||||
|
|
@ -325,7 +331,7 @@ void InstantSetup()
|
|||
String& myinc = incs.At(ii++);
|
||||
if(IsNull(myinc) || ToLower(myinc).Find("mysql") >= 0)
|
||||
myinc = GetExeDirFile(x64 ? "bin/mysql/include" : "bin/mysql/include");
|
||||
|
||||
|
||||
libs.At(0) = vc + (ver17 ? (x64 ? "/lib/x64" : "/lib/x86") : (x64 ? "/lib/amd64" : "/lib"));
|
||||
ii = 1;
|
||||
if(lib.GetCount()) {
|
||||
|
|
@ -348,9 +354,9 @@ void InstantSetup()
|
|||
pglib = GetExeDirFile(x64 ? "bin/pgsql/x64/lib" : "bin/pgsql/x86/lib");
|
||||
|
||||
String& mylib = libs.At(ii++);
|
||||
if(IsNull(mylib) || ToLower(mylib).Find("pgsql") >= 0)
|
||||
if(IsNull(mylib) || ToLower(mylib).Find("mysql") >= 0)
|
||||
mylib = GetExeDirFile(x64 ? "bin/mysql/lib64" : "bin/mysql/lib32");
|
||||
|
||||
|
||||
bm.GetAdd("BUILDER") = builder;
|
||||
bmSet(bm, "COMPILER", "");
|
||||
bmSet(bm, "COMMON_OPTIONS", x64 ? "/bigobj" : "/bigobj /D_ATL_XP_TARGETING");
|
||||
|
|
|
|||
|
|
@ -35,14 +35,17 @@ Windows]&]
|
|||
POSIX]&]
|
||||
[s0; [^topic`:`/`/ide`/app`/UppHub`_en`-us`#2`.1`.3^ 2.1.3
|
||||
macOS]&]
|
||||
[s0; [^topic`:`/`/ide`/app`/UppHub`_en`-us`#2^ 3. UppHub module developer
|
||||
[s0; [^topic`:`/`/ide`/app`/UppHub`_en`-us`#3^ 3. Package developer
|
||||
perspective]&]
|
||||
[s0; [^topic`:`/`/ide`/app`/UppHub`_en`-us`#3^ 4. UppHub maintainer
|
||||
information]&]
|
||||
[s0; [^topic`:`/`/ide`/app`/UppHub`_en`-us`#3`.1^ 3.1 Overview]&]
|
||||
[s0; [^topic`:`/`/ide`/app`/UppHub`_en`-us`#3`.2^ 3.2 Publishing
|
||||
package]&]
|
||||
[s0; [^topic`:`/`/ide`/app`/UppHub`_en`-us`#4^ 4. Maintainer information]&]
|
||||
[s0; [^topic`:`/`/ide`/app`/UppHub`_en`-us`#4^ 5. Global registry]&]
|
||||
[s0; &]
|
||||
[s3;:1: 1. User perspective&]
|
||||
[s5; UppHub is a system intended to catalogue and install independently
|
||||
developed U`+`+ packages.&]
|
||||
developed U`+`+ packages over the network.&]
|
||||
[s0; &]
|
||||
[s0;= [*
|
||||
@@image:3434&2082
|
||||
|
|
@ -96,7 +99,8 @@ be installed with U`+`+ installation script that user must lunch&]
|
|||
through environment. Git could be installed with brew package
|
||||
manager.&]
|
||||
[s0; &]
|
||||
[s3;:3: 3. UppHub module developer perspective&]
|
||||
[s3;:3: 3. Package developer perspective&]
|
||||
[s22;:3`.1: 3.1 Overview&]
|
||||
[s5; U`+`+ modules are developed as git repositories representing
|
||||
U`+`+ nests. The name of module and of core packages that are
|
||||
intended to be used in other projects should have unique name
|
||||
|
|
@ -118,12 +122,28 @@ format), consider putting it to [* plugin ](like plugin/md)&]
|
|||
/ run automatically and fail with non`-zero exit, e.g. with ASSERT)
|
||||
into [* autotest ]directory&]
|
||||
[s5;l128;i150;O0; put other tests to [* test]&]
|
||||
[s5; &]
|
||||
[s3;:4: 4. UppHub maintainer information&]
|
||||
[s5; This information is only important for maintainers of UppHub.
|
||||
Module nests are listed in json files that are accessible through
|
||||
http. JSON file specifies information about individual module
|
||||
lists, but can also reference other lists of modules:&]
|
||||
[s22;:3`.2: 3.2 Publishing package&]
|
||||
[s5; In order to publish the package to a wider audience you need
|
||||
to create git repository that is publicly available and created
|
||||
according to the instructions in the previous point. After that,
|
||||
you need to let us know that your package should be entered into
|
||||
the global registry. You could do it by creating appropriate
|
||||
thread in UppHub [^https`:`/`/www`.ultimatepp`.org`/forums`/index`.php`?t`=thread`&frm`_id`=62`&^ f
|
||||
orum] or by creating issue in this [^https`:`/`/github`.com`/ultimatepp`/UppHub^ re
|
||||
pository]. Do not forget to describe what the package is supposed
|
||||
to do. This will help with verification. If everything will be
|
||||
alright, our maintainers will do the rest.&]
|
||||
[s5; The process is very easy and even beginners shouldn`'t have
|
||||
problem with it.&]
|
||||
[s5; We encourage all U`+`+ users to create own packages and to share
|
||||
them with the community. Thanks to that we will grow as a framework
|
||||
and community.&]
|
||||
[s3;:4: 4. Maintainer information&]
|
||||
[s5; This information is only important for maintainers of UppHub
|
||||
and packages owners. Module nests are listed in json files that
|
||||
are accessible through http. JSON file specifies information
|
||||
about individual module lists, but can also reference other lists
|
||||
of modules:&]
|
||||
[s7; &]
|
||||
[s0;l321; [C@5+75 `{]&]
|
||||
[s7; `"nests`": `[&]
|
||||
|
|
@ -156,4 +176,9 @@ tag or branch can be specified in [* branch]. Alternatively, the
|
|||
entry can by defined with [* url] which points to https location
|
||||
with the same content.&]
|
||||
[s5; Additionally, the list can contain [* links] to other lists.&]
|
||||
[s3; 5. Global registry&]
|
||||
[s5; The global json file with all packages list is stored in [^https`:`/`/github`.com`/ultimatepp`/UppHub^ t
|
||||
his] public repository. It is read by TheIDE by obtaining this
|
||||
file via network request. It is downloaded each time UppHub dialog
|
||||
is being opened.&]
|
||||
[s5; ]]
|
||||
File diff suppressed because it is too large
Load diff
Binary file not shown.
|
Before Width: | Height: | Size: 1.1 KiB |
|
|
@ -1 +1 @@
|
|||
5555 ICON DISCARDABLE "ide.ico"
|
||||
5555 ICON DISCARDABLE "icon.ico"
|
||||
|
|
|
|||
|
|
@ -562,7 +562,7 @@ void Ide::EditFile0(const String& path, byte charset, int spellcheck_comments, c
|
|||
view_file.Seek(0);
|
||||
int le = Null;
|
||||
#ifdef CPU_64
|
||||
const int64 max_size = (int64)4096*1024*1024;
|
||||
const int64 max_size = (int64)2047*1024*1024;
|
||||
#else
|
||||
const int64 max_size = 768*1024*1024;
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -1,5 +1,4 @@
|
|||
#include "ide.h"
|
||||
#include "ide.h"
|
||||
|
||||
#define IMAGECLASS IdeImg
|
||||
#define IMAGEFILE <ide/ide.iml>
|
||||
|
|
|
|||
9
upptst/Annotations/Annotations.upp
Normal file
9
upptst/Annotations/Annotations.upp
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
uses
|
||||
CtrlLib;
|
||||
|
||||
file
|
||||
main.cpp;
|
||||
|
||||
mainconfig
|
||||
"" = "GUI";
|
||||
|
||||
204
upptst/Annotations/main.cpp
Normal file
204
upptst/Annotations/main.cpp
Normal file
|
|
@ -0,0 +1,204 @@
|
|||
#include <CtrlLib/CtrlLib.h>
|
||||
|
||||
using namespace Upp;
|
||||
/*
|
||||
STRUCT,
|
||||
STRUCTTEMPLATE,
|
||||
TYPEDEF,
|
||||
CONSTRUCTOR,
|
||||
DESTRUCTOR,
|
||||
FUNCTION,
|
||||
INSTANCEFUNCTION,
|
||||
CLASSFUNCTION,
|
||||
FUNCTIONTEMPLATE,
|
||||
INSTANCEFUNCTIONTEMPLATE,
|
||||
CLASSFUNCTIONTEMPLATE,
|
||||
INLINEFRIEND,
|
||||
VARIABLE,
|
||||
INSTANCEVARIABLE,
|
||||
CLASSVARIABLE,
|
||||
ENUM,
|
||||
MACRO,
|
||||
FRIENDCLASS,
|
||||
NAMESPACE,
|
||||
FLAGTEST,
|
||||
*/
|
||||
|
||||
void *Bar();
|
||||
int& Bar2();
|
||||
|
||||
#define MACRO
|
||||
|
||||
#define FN_MACRO(x)
|
||||
|
||||
enum Enum {
|
||||
EnumItem,
|
||||
EnumItem2 = 2,
|
||||
|
||||
};
|
||||
|
||||
void Function();
|
||||
|
||||
void Function()
|
||||
{
|
||||
}
|
||||
|
||||
String global_variable;
|
||||
static String static_variable;
|
||||
|
||||
struct Struct {
|
||||
enum { NAME };
|
||||
|
||||
operator String();
|
||||
|
||||
String attribute;
|
||||
static String meta_attribute;
|
||||
|
||||
void Method(String param, int foo);
|
||||
static void ClassMethod(int param);
|
||||
|
||||
void Method();
|
||||
static void ClassMethod();
|
||||
|
||||
Struct();
|
||||
~Struct();
|
||||
};
|
||||
|
||||
String Struct::meta_attribute;
|
||||
|
||||
void Struct::Method(String param)
|
||||
{
|
||||
String x;
|
||||
}
|
||||
|
||||
void Struct::Test()
|
||||
{
|
||||
}
|
||||
|
||||
void Struct::ClassMethod(int param)
|
||||
{
|
||||
}
|
||||
|
||||
void Struct::Method()
|
||||
{
|
||||
}
|
||||
|
||||
void Struct::ClassMethod()
|
||||
{
|
||||
}
|
||||
|
||||
Struct::Struct()
|
||||
{
|
||||
}
|
||||
|
||||
Struct::~Struct()
|
||||
{
|
||||
}
|
||||
|
||||
Struct h;
|
||||
|
||||
void Foo() {
|
||||
h.
|
||||
}
|
||||
|
||||
class Class {
|
||||
int x;
|
||||
|
||||
Class();
|
||||
~Class();
|
||||
};
|
||||
|
||||
union Union {
|
||||
int x, y;
|
||||
};
|
||||
|
||||
template <class T>
|
||||
struct TemplateFoo {
|
||||
int y;
|
||||
};
|
||||
|
||||
typedef Foo Typedef;
|
||||
|
||||
using UsingTypedef = Foo;
|
||||
|
||||
namespace Namespace {
|
||||
#define MACRO
|
||||
|
||||
#define FN_MACRO(x)
|
||||
|
||||
enum Enum {
|
||||
EnumItem,
|
||||
EnumItem2 = 2,
|
||||
|
||||
};
|
||||
|
||||
void Function();
|
||||
|
||||
void Function()
|
||||
{
|
||||
}
|
||||
|
||||
struct Struct {
|
||||
String attribute;
|
||||
static String meta_attribute;
|
||||
|
||||
void Method(String param, int foo);
|
||||
void ClassMethod(int param);
|
||||
|
||||
void Method();
|
||||
void ClassMethod();
|
||||
|
||||
Struct();
|
||||
~Struct();
|
||||
};
|
||||
|
||||
String Struct::meta_attribute;
|
||||
|
||||
void Struct::Method(String param)
|
||||
{
|
||||
}
|
||||
|
||||
void Struct::ClassMethod(int param)
|
||||
{
|
||||
}
|
||||
|
||||
void Struct::Method()
|
||||
{
|
||||
}
|
||||
|
||||
void Struct::ClassMethod()
|
||||
{
|
||||
}
|
||||
|
||||
Struct::Struct()
|
||||
{
|
||||
}
|
||||
|
||||
Struct::~Struct()
|
||||
{
|
||||
}
|
||||
|
||||
class Class {
|
||||
int x;
|
||||
|
||||
Class();
|
||||
~Class();
|
||||
};
|
||||
|
||||
union Union {
|
||||
int x, y;
|
||||
};
|
||||
|
||||
template <class T>
|
||||
struct TemplateFoo {
|
||||
int y;
|
||||
};
|
||||
|
||||
typedef Foo Typedef;
|
||||
|
||||
using UsingTypedef = Foo;
|
||||
};
|
||||
|
||||
GUI_APP_MAIN
|
||||
{
|
||||
}
|
||||
9
upptst/FileSelNativeMultiPre/FileSelNativeMultiPre.upp
Normal file
9
upptst/FileSelNativeMultiPre/FileSelNativeMultiPre.upp
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
uses
|
||||
CtrlLib;
|
||||
|
||||
file
|
||||
main.cpp;
|
||||
|
||||
mainconfig
|
||||
"" = "GUI";
|
||||
|
||||
17
upptst/FileSelNativeMultiPre/main.cpp
Normal file
17
upptst/FileSelNativeMultiPre/main.cpp
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
#include <CtrlLib/CtrlLib.h>
|
||||
|
||||
using namespace Upp;
|
||||
|
||||
GUI_APP_MAIN
|
||||
{
|
||||
FileSelNative sel;
|
||||
|
||||
sel.AllFilesType();
|
||||
sel.Type("All", "*.*");
|
||||
sel.Multi();
|
||||
sel.NoAsking();
|
||||
sel = GetDataFile("main.cpp");
|
||||
|
||||
if(sel.ExecuteSaveAs("save as"))
|
||||
PromptOK("\1" + ~sel);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue