diff options
44 files changed, 2260 insertions, 343 deletions
@@ -12,7 +12,7 @@ subprojects/c89atomic/ subprojects/c89atomic.wrap subprojects/libcurl/ subprojects/libcurl.wrap -subprojects/ffmpeg-6.1.1/ +subprojects/ffmpeg-*/ subprojects/glfw3/ subprojects/glfw3.wrap subprojects/jansson/ diff --git a/doc/design.dia b/doc/design.dia new file mode 100644 index 0000000..cd3c41b --- /dev/null +++ b/doc/design.dia @@ -0,0 +1,1020 @@ +<?xml version="1.0" encoding="UTF-8"?> +<dia:diagram xmlns:dia="http://www.lysator.liu.se/~alla/dia/"> + <dia:diagramdata> + <dia:attribute name="background"> + <dia:color val="#f4ddcaff"/> + </dia:attribute> + <dia:attribute name="pagebreak"> + <dia:color val="#000099ff"/> + </dia:attribute> + <dia:attribute name="paper"> + <dia:composite type="paper"> + <dia:attribute name="name"> + <dia:string>#A4#</dia:string> + </dia:attribute> + <dia:attribute name="tmargin"> + <dia:real val="2.8222"/> + </dia:attribute> + <dia:attribute name="bmargin"> + <dia:real val="2.8222"/> + </dia:attribute> + <dia:attribute name="lmargin"> + <dia:real val="2.8222"/> + </dia:attribute> + <dia:attribute name="rmargin"> + <dia:real val="2.8222"/> + </dia:attribute> + <dia:attribute name="is_portrait"> + <dia:boolean val="true"/> + </dia:attribute> + <dia:attribute name="scaling"> + <dia:real val="1"/> + </dia:attribute> + <dia:attribute name="fitto"> + <dia:boolean val="false"/> + </dia:attribute> + </dia:composite> + </dia:attribute> + <dia:attribute name="grid"> + <dia:composite type="grid"> + <dia:attribute name="dynamic"> + <dia:boolean val="true"/> + </dia:attribute> + <dia:attribute name="width_x"> + <dia:real val="1"/> + </dia:attribute> + <dia:attribute name="width_y"> + <dia:real val="1"/> + </dia:attribute> + <dia:attribute name="visible_x"> + <dia:int val="1"/> + </dia:attribute> + <dia:attribute name="visible_y"> + <dia:int val="1"/> + </dia:attribute> + <dia:composite type="color"/> + </dia:composite> + </dia:attribute> + <dia:attribute name="color"> + <dia:color val="#d8e5e5ff"/> + </dia:attribute> + <dia:attribute name="guides"/> + <dia:attribute name="guide_color"> + <dia:color val="#00ff00ff"/> + </dia:attribute> + <dia:attribute name="display"> + <dia:composite type="display"> + <dia:attribute name="antialiased"> + <dia:boolean val="true"/> + </dia:attribute> + <dia:attribute name="snap-to-grid"> + <dia:boolean val="false"/> + </dia:attribute> + <dia:attribute name="snap-to-guides"> + <dia:boolean val="true"/> + </dia:attribute> + <dia:attribute name="snap-to-object"> + <dia:boolean val="true"/> + </dia:attribute> + <dia:attribute name="show-grid"> + <dia:boolean val="true"/> + </dia:attribute> + <dia:attribute name="show-guides"> + <dia:boolean val="true"/> + </dia:attribute> + <dia:attribute name="show-connection-points"> + <dia:boolean val="true"/> + </dia:attribute> + </dia:composite> + </dia:attribute> + </dia:diagramdata> + <dia:layer name="Background" visible="true" connectable="true"/> + <dia:layer name="Background" visible="true" connectable="true"/> + <dia:layer name="Background" visible="true" connectable="true"/> + <dia:layer name="Background" visible="true" connectable="true"/> + <dia:layer name="Background" visible="true" connectable="true"/> + <dia:layer name="Background" visible="true" connectable="true"/> + <dia:layer name="Background" visible="true" connectable="true" active="true"> + <dia:object type="Standard - Line" version="0" id="O0"> + <dia:attribute name="obj_pos"> + <dia:point val="13.1319,10.254"/> + </dia:attribute> + <dia:attribute name="obj_bb"> + <dia:rectangle val="13.0826,5.01063;17.5196,10.3033"/> + </dia:attribute> + <dia:attribute name="conn_endpoints"> + <dia:point val="13.1319,10.254"/> + <dia:point val="17.4703,5.05993"/> + </dia:attribute> + <dia:attribute name="numcp"> + <dia:int val="1"/> + </dia:attribute> + <dia:attribute name="line_width"> + <dia:real val="0.070000000000000007"/> + </dia:attribute> + <dia:attribute name="end_arrow"> + <dia:enum val="22"/> + </dia:attribute> + <dia:attribute name="end_arrow_length"> + <dia:real val="0.5"/> + </dia:attribute> + <dia:attribute name="end_arrow_width"> + <dia:real val="0.5"/> + </dia:attribute> + </dia:object> + <dia:object type="Cisco - Cellular phone" version="1" id="O1"> + <dia:attribute name="obj_pos"> + <dia:point val="11.2207,10.4276"/> + </dia:attribute> + <dia:attribute name="obj_bb"> + <dia:rectangle val="11.1807,10.3276;12.9217,12.8237"/> + </dia:attribute> + <dia:attribute name="meta"> + <dia:composite type="dict"/> + </dia:attribute> + <dia:attribute name="elem_corner"> + <dia:point val="11.2207,10.4276"/> + </dia:attribute> + <dia:attribute name="elem_width"> + <dia:real val="1.2942626925997278"/> + </dia:attribute> + <dia:attribute name="elem_height"> + <dia:real val="2.3054244343357921"/> + </dia:attribute> + <dia:attribute name="line_width"> + <dia:real val="0.10000000000000001"/> + </dia:attribute> + <dia:attribute name="line_colour"> + <dia:color val="#000000ff"/> + </dia:attribute> + <dia:attribute name="fill_colour"> + <dia:color val="#ffffffff"/> + </dia:attribute> + <dia:attribute name="show_background"> + <dia:boolean val="true"/> + </dia:attribute> + <dia:attribute name="line_style"> + <dia:enum val="0"/> + <dia:real val="1"/> + </dia:attribute> + <dia:attribute name="flip_horizontal"> + <dia:boolean val="false"/> + </dia:attribute> + <dia:attribute name="flip_vertical"> + <dia:boolean val="false"/> + </dia:attribute> + <dia:attribute name="subscale"> + <dia:real val="1"/> + </dia:attribute> + </dia:object> + <dia:object type="Cisco - IBM Mini (AS400)" version="1" id="O2"> + <dia:attribute name="obj_pos"> + <dia:point val="17.5953,-2.18277"/> + </dia:attribute> + <dia:attribute name="obj_bb"> + <dia:rectangle val="17.5929,-2.18519;22.0652,4.26977"/> + </dia:attribute> + <dia:attribute name="meta"> + <dia:composite type="dict"/> + </dia:attribute> + <dia:attribute name="elem_corner"> + <dia:point val="17.5953,-2.18277"/> + </dia:attribute> + <dia:attribute name="elem_width"> + <dia:real val="4.4675252846901756"/> + </dia:attribute> + <dia:attribute name="elem_height"> + <dia:real val="6.4501141858332547"/> + </dia:attribute> + <dia:attribute name="line_width"> + <dia:real val="0.10000000000000001"/> + </dia:attribute> + <dia:attribute name="line_colour"> + <dia:color val="#000000ff"/> + </dia:attribute> + <dia:attribute name="fill_colour"> + <dia:color val="#ffffffff"/> + </dia:attribute> + <dia:attribute name="show_background"> + <dia:boolean val="true"/> + </dia:attribute> + <dia:attribute name="line_style"> + <dia:enum val="0"/> + <dia:real val="1"/> + </dia:attribute> + <dia:attribute name="flip_horizontal"> + <dia:boolean val="false"/> + </dia:attribute> + <dia:attribute name="flip_vertical"> + <dia:boolean val="false"/> + </dia:attribute> + <dia:attribute name="subscale"> + <dia:real val="1"/> + </dia:attribute> + </dia:object> + <dia:object type="Tree1" version="1" id="O3"> + <dia:attribute name="obj_pos"> + <dia:point val="19.1215,-3.53818"/> + </dia:attribute> + <dia:attribute name="obj_bb"> + <dia:rectangle val="18.9042,-3.66546;20.1741,-1.73568"/> + </dia:attribute> + <dia:attribute name="meta"> + <dia:composite type="dict"/> + </dia:attribute> + <dia:attribute name="elem_corner"> + <dia:point val="19.1215,-3.53818"/> + </dia:attribute> + <dia:attribute name="elem_width"> + <dia:real val="0.83536585365853677"/> + </dia:attribute> + <dia:attribute name="elem_height"> + <dia:real val="1.7125000000000004"/> + </dia:attribute> + <dia:attribute name="line_width"> + <dia:real val="0.089999999999999997"/> + </dia:attribute> + <dia:attribute name="line_colour"> + <dia:color val="#000000ff"/> + </dia:attribute> + <dia:attribute name="fill_colour"> + <dia:color val="#ffffffff"/> + </dia:attribute> + <dia:attribute name="show_background"> + <dia:boolean val="true"/> + </dia:attribute> + <dia:attribute name="line_style"> + <dia:enum val="0"/> + <dia:real val="1"/> + </dia:attribute> + <dia:attribute name="flip_horizontal"> + <dia:boolean val="false"/> + </dia:attribute> + <dia:attribute name="flip_vertical"> + <dia:boolean val="false"/> + </dia:attribute> + <dia:attribute name="subscale"> + <dia:real val="1"/> + </dia:attribute> + </dia:object> + <dia:object type="Cisco - Standing Man" version="1" id="O4"> + <dia:attribute name="obj_pos"> + <dia:point val="8.94928,10.4508"/> + </dia:attribute> + <dia:attribute name="obj_bb"> + <dia:rectangle val="8.94928,10.4508;10.7443,15.2898"/> + </dia:attribute> + <dia:attribute name="meta"> + <dia:composite type="dict"/> + </dia:attribute> + <dia:attribute name="elem_corner"> + <dia:point val="8.94928,10.4508"/> + </dia:attribute> + <dia:attribute name="elem_width"> + <dia:real val="1.7949842895096773"/> + </dia:attribute> + <dia:attribute name="elem_height"> + <dia:real val="4.8390429847471363"/> + </dia:attribute> + <dia:attribute name="line_width"> + <dia:real val="0.10000000000000001"/> + </dia:attribute> + <dia:attribute name="line_colour"> + <dia:color val="#000000ff"/> + </dia:attribute> + <dia:attribute name="fill_colour"> + <dia:color val="#ffffffff"/> + </dia:attribute> + <dia:attribute name="show_background"> + <dia:boolean val="true"/> + </dia:attribute> + <dia:attribute name="line_style"> + <dia:enum val="0"/> + <dia:real val="1"/> + </dia:attribute> + <dia:attribute name="flip_horizontal"> + <dia:boolean val="false"/> + </dia:attribute> + <dia:attribute name="flip_vertical"> + <dia:boolean val="false"/> + </dia:attribute> + <dia:attribute name="subscale"> + <dia:real val="1"/> + </dia:attribute> + </dia:object> + <dia:object type="Cisco - TV" version="1" id="O5"> + <dia:attribute name="obj_pos"> + <dia:point val="4.78561,7.91626"/> + </dia:attribute> + <dia:attribute name="obj_bb"> + <dia:rectangle val="4.78374,7.91391;7.13542,10.2499"/> + </dia:attribute> + <dia:attribute name="meta"> + <dia:composite type="dict"/> + </dia:attribute> + <dia:attribute name="elem_corner"> + <dia:point val="4.78561,7.91626"/> + </dia:attribute> + <dia:attribute name="elem_width"> + <dia:real val="2.3472609013178616"/> + </dia:attribute> + <dia:attribute name="elem_height"> + <dia:real val="2.3312694911489307"/> + </dia:attribute> + <dia:attribute name="line_width"> + <dia:real val="0.10000000000000001"/> + </dia:attribute> + <dia:attribute name="line_colour"> + <dia:color val="#000000ff"/> + </dia:attribute> + <dia:attribute name="fill_colour"> + <dia:color val="#ffffffff"/> + </dia:attribute> + <dia:attribute name="show_background"> + <dia:boolean val="true"/> + </dia:attribute> + <dia:attribute name="line_style"> + <dia:enum val="0"/> + <dia:real val="1"/> + </dia:attribute> + <dia:attribute name="flip_horizontal"> + <dia:boolean val="true"/> + </dia:attribute> + <dia:attribute name="flip_vertical"> + <dia:boolean val="false"/> + </dia:attribute> + <dia:attribute name="subscale"> + <dia:real val="1"/> + </dia:attribute> + </dia:object> + <dia:object type="Standard - Text" version="1" id="O6"> + <dia:attribute name="obj_pos"> + <dia:point val="12.9624,12.1879"/> + </dia:attribute> + <dia:attribute name="obj_bb"> + <dia:rectangle val="12.9624,11.5279;17.7599,12.3854"/> + </dia:attribute> + <dia:attribute name="text"> + <dia:composite type="text"> + <dia:attribute name="string"> + <dia:string>#Client (libclient)#</dia:string> + </dia:attribute> + <dia:attribute name="font"> + <dia:font family="sans" style="0" name="Helvetica"/> + </dia:attribute> + <dia:attribute name="height"> + <dia:real val="0.76482221393664818"/> + </dia:attribute> + <dia:attribute name="pos"> + <dia:point val="12.9624,12.1879"/> + </dia:attribute> + <dia:attribute name="color"> + <dia:color val="#000000ff"/> + </dia:attribute> + <dia:attribute name="alignment"> + <dia:enum val="0"/> + </dia:attribute> + </dia:composite> + </dia:attribute> + <dia:attribute name="valign"> + <dia:enum val="3"/> + </dia:attribute> + </dia:object> + <dia:object type="Cisco - STB (set top box)" version="1" id="O7"> + <dia:attribute name="obj_pos"> + <dia:point val="7.36498,9.31536"/> + </dia:attribute> + <dia:attribute name="obj_bb"> + <dia:rectangle val="7.36398,9.31436;8.8325,9.95141"/> + </dia:attribute> + <dia:attribute name="meta"> + <dia:composite type="dict"/> + </dia:attribute> + <dia:attribute name="elem_corner"> + <dia:point val="7.36498,9.31536"/> + </dia:attribute> + <dia:attribute name="elem_width"> + <dia:real val="1.4661067992829642"/> + </dia:attribute> + <dia:attribute name="elem_height"> + <dia:real val="0.63463103621674977"/> + </dia:attribute> + <dia:attribute name="line_width"> + <dia:real val="0.10000000000000001"/> + </dia:attribute> + <dia:attribute name="line_colour"> + <dia:color val="#000000ff"/> + </dia:attribute> + <dia:attribute name="fill_colour"> + <dia:color val="#ffffffff"/> + </dia:attribute> + <dia:attribute name="show_background"> + <dia:boolean val="true"/> + </dia:attribute> + <dia:attribute name="line_style"> + <dia:enum val="0"/> + <dia:real val="1"/> + </dia:attribute> + <dia:attribute name="flip_horizontal"> + <dia:boolean val="true"/> + </dia:attribute> + <dia:attribute name="flip_vertical"> + <dia:boolean val="false"/> + </dia:attribute> + <dia:attribute name="subscale"> + <dia:real val="1"/> + </dia:attribute> + </dia:object> + <dia:object type="Standard - Line" version="0" id="O8"> + <dia:attribute name="obj_pos"> + <dia:point val="17.0481,1.39917"/> + </dia:attribute> + <dia:attribute name="obj_bb"> + <dia:rectangle val="8.80908,1.3497;17.0976,9.11273"/> + </dia:attribute> + <dia:attribute name="conn_endpoints"> + <dia:point val="17.0481,1.39917"/> + <dia:point val="8.85855,9.06326"/> + </dia:attribute> + <dia:attribute name="numcp"> + <dia:int val="1"/> + </dia:attribute> + <dia:attribute name="line_color"> + <dia:color val="#9668a3ff"/> + </dia:attribute> + <dia:attribute name="line_width"> + <dia:real val="0.070000000000000007"/> + </dia:attribute> + <dia:attribute name="start_arrow"> + <dia:enum val="22"/> + </dia:attribute> + <dia:attribute name="start_arrow_length"> + <dia:real val="0.5"/> + </dia:attribute> + <dia:attribute name="start_arrow_width"> + <dia:real val="0.5"/> + </dia:attribute> + <dia:attribute name="end_arrow"> + <dia:enum val="22"/> + </dia:attribute> + <dia:attribute name="end_arrow_length"> + <dia:real val="0.5"/> + </dia:attribute> + <dia:attribute name="end_arrow_width"> + <dia:real val="0.5"/> + </dia:attribute> + </dia:object> + <dia:object type="Standard - Text" version="1" id="O9"> + <dia:attribute name="obj_pos"> + <dia:point val="4.96367,11.1898"/> + </dia:attribute> + <dia:attribute name="obj_bb"> + <dia:rectangle val="4.96367,10.5298;8.72367,11.3873"/> + </dia:attribute> + <dia:attribute name="text"> + <dia:composite type="text"> + <dia:attribute name="string"> + <dia:string>#Sink (libsink)#</dia:string> + </dia:attribute> + <dia:attribute name="font"> + <dia:font family="sans" style="0" name="Helvetica"/> + </dia:attribute> + <dia:attribute name="height"> + <dia:real val="0.76482221393664818"/> + </dia:attribute> + <dia:attribute name="pos"> + <dia:point val="4.96367,11.1898"/> + </dia:attribute> + <dia:attribute name="color"> + <dia:color val="#000000ff"/> + </dia:attribute> + <dia:attribute name="alignment"> + <dia:enum val="0"/> + </dia:attribute> + </dia:composite> + </dia:attribute> + <dia:attribute name="valign"> + <dia:enum val="3"/> + </dia:attribute> + </dia:object> + <dia:object type="Standard - Text" version="1" id="O10"> + <dia:attribute name="obj_pos"> + <dia:point val="20.1947,-2.7356"/> + </dia:attribute> + <dia:attribute name="obj_bb"> + <dia:rectangle val="20.1947,-3.3956;23.9897,-2.5381"/> + </dia:attribute> + <dia:attribute name="text"> + <dia:composite type="text"> + <dia:attribute name="string"> + <dia:string>#Tree (server)#</dia:string> + </dia:attribute> + <dia:attribute name="font"> + <dia:font family="sans" style="0" name="Helvetica"/> + </dia:attribute> + <dia:attribute name="height"> + <dia:real val="0.76482221393664818"/> + </dia:attribute> + <dia:attribute name="pos"> + <dia:point val="20.1947,-2.7356"/> + </dia:attribute> + <dia:attribute name="color"> + <dia:color val="#000000ff"/> + </dia:attribute> + <dia:attribute name="alignment"> + <dia:enum val="0"/> + </dia:attribute> + </dia:composite> + </dia:attribute> + <dia:attribute name="valign"> + <dia:enum val="3"/> + </dia:attribute> + </dia:object> + <dia:object type="Standard - Line" version="0" id="O11"> + <dia:attribute name="obj_pos"> + <dia:point val="12.4381,9.93856"/> + </dia:attribute> + <dia:attribute name="obj_bb"> + <dia:rectangle val="12.3888,4.62497;16.9155,9.98787"/> + </dia:attribute> + <dia:attribute name="conn_endpoints"> + <dia:point val="12.4381,9.93856"/> + <dia:point val="16.8662,4.67428"/> + </dia:attribute> + <dia:attribute name="numcp"> + <dia:int val="1"/> + </dia:attribute> + <dia:attribute name="line_width"> + <dia:real val="0.070000000000000007"/> + </dia:attribute> + <dia:attribute name="start_arrow"> + <dia:enum val="1"/> + </dia:attribute> + <dia:attribute name="start_arrow_length"> + <dia:real val="0.5"/> + </dia:attribute> + <dia:attribute name="start_arrow_width"> + <dia:real val="0.5"/> + </dia:attribute> + </dia:object> + <dia:object type="Cisco - Radio Tower" version="1" id="O12"> + <dia:attribute name="obj_pos"> + <dia:point val="34.7279,-1.54667"/> + </dia:attribute> + <dia:attribute name="obj_bb"> + <dia:rectangle val="34.6479,-1.62667;37.12,4.94319"/> + </dia:attribute> + <dia:attribute name="meta"> + <dia:composite type="dict"/> + </dia:attribute> + <dia:attribute name="elem_corner"> + <dia:point val="34.7279,-1.54667"/> + </dia:attribute> + <dia:attribute name="elem_width"> + <dia:real val="2.3431107153689084"/> + </dia:attribute> + <dia:attribute name="elem_height"> + <dia:real val="6.4183095135720363"/> + </dia:attribute> + <dia:attribute name="line_width"> + <dia:real val="0.10000000000000001"/> + </dia:attribute> + <dia:attribute name="line_colour"> + <dia:color val="#000000ff"/> + </dia:attribute> + <dia:attribute name="fill_colour"> + <dia:color val="#ffffffff"/> + </dia:attribute> + <dia:attribute name="show_background"> + <dia:boolean val="true"/> + </dia:attribute> + <dia:attribute name="line_style"> + <dia:enum val="0"/> + <dia:real val="1"/> + </dia:attribute> + <dia:attribute name="flip_horizontal"> + <dia:boolean val="true"/> + </dia:attribute> + <dia:attribute name="flip_vertical"> + <dia:boolean val="false"/> + </dia:attribute> + <dia:attribute name="subscale"> + <dia:real val="1"/> + </dia:attribute> + </dia:object> + <dia:object type="Cisco - File Server" version="1" id="O13"> + <dia:attribute name="obj_pos"> + <dia:point val="28.6989,3.60233"/> + </dia:attribute> + <dia:attribute name="obj_bb"> + <dia:rectangle val="28.6965,3.5999;30.6011,6.66403"/> + </dia:attribute> + <dia:attribute name="meta"> + <dia:composite type="dict"/> + </dia:attribute> + <dia:attribute name="elem_corner"> + <dia:point val="28.6989,3.60233"/> + </dia:attribute> + <dia:attribute name="elem_width"> + <dia:real val="1.8998393512027412"/> + </dia:attribute> + <dia:attribute name="elem_height"> + <dia:real val="3.0592670026877342"/> + </dia:attribute> + <dia:attribute name="line_width"> + <dia:real val="0.10000000000000001"/> + </dia:attribute> + <dia:attribute name="line_colour"> + <dia:color val="#000000ff"/> + </dia:attribute> + <dia:attribute name="fill_colour"> + <dia:color val="#ffffffff"/> + </dia:attribute> + <dia:attribute name="show_background"> + <dia:boolean val="true"/> + </dia:attribute> + <dia:attribute name="line_style"> + <dia:enum val="0"/> + <dia:real val="1"/> + </dia:attribute> + <dia:attribute name="flip_horizontal"> + <dia:boolean val="false"/> + </dia:attribute> + <dia:attribute name="flip_vertical"> + <dia:boolean val="false"/> + </dia:attribute> + <dia:attribute name="subscale"> + <dia:real val="1"/> + </dia:attribute> + </dia:object> + <dia:object type="Cisco - Terminal" version="1" id="O14"> + <dia:attribute name="obj_pos"> + <dia:point val="27.3192,5.42086"/> + </dia:attribute> + <dia:attribute name="obj_bb"> + <dia:rectangle val="27.3171,5.41858;28.5492,6.63724"/> + </dia:attribute> + <dia:attribute name="meta"> + <dia:composite type="dict"/> + </dia:attribute> + <dia:attribute name="elem_corner"> + <dia:point val="27.3192,5.42086"/> + </dia:attribute> + <dia:attribute name="elem_width"> + <dia:real val="1.2274565158776156"/> + </dia:attribute> + <dia:attribute name="elem_height"> + <dia:real val="1.2138793277411046"/> + </dia:attribute> + <dia:attribute name="line_width"> + <dia:real val="0.10000000000000001"/> + </dia:attribute> + <dia:attribute name="line_colour"> + <dia:color val="#000000ff"/> + </dia:attribute> + <dia:attribute name="fill_colour"> + <dia:color val="#ffffffff"/> + </dia:attribute> + <dia:attribute name="show_background"> + <dia:boolean val="true"/> + </dia:attribute> + <dia:attribute name="line_style"> + <dia:enum val="0"/> + <dia:real val="1"/> + </dia:attribute> + <dia:attribute name="flip_horizontal"> + <dia:boolean val="false"/> + </dia:attribute> + <dia:attribute name="flip_vertical"> + <dia:boolean val="false"/> + </dia:attribute> + <dia:attribute name="subscale"> + <dia:real val="1"/> + </dia:attribute> + </dia:object> + <dia:object type="Standard - Arc" version="0" id="O15"> + <dia:attribute name="obj_pos"> + <dia:point val="33.8633,-1.81419"/> + </dia:attribute> + <dia:attribute name="obj_bb"> + <dia:rectangle val="33.3486,-1.87453;34.8777,2.19915"/> + </dia:attribute> + <dia:attribute name="conn_endpoints"> + <dia:point val="33.8633,-1.81419"/> + <dia:point val="34.8174,2.13881"/> + </dia:attribute> + <dia:attribute name="arc_color"> + <dia:color val="#cc9f9fff"/> + </dia:attribute> + <dia:attribute name="curve_distance"> + <dia:real val="0.88923828036935093"/> + </dia:attribute> + </dia:object> + <dia:object type="Standard - Line" version="0" id="O16"> + <dia:attribute name="obj_pos"> + <dia:point val="28.273,3.99002"/> + </dia:attribute> + <dia:attribute name="obj_bb"> + <dia:rectangle val="22.4777,1.65416;28.3184,4.06003"/> + </dia:attribute> + <dia:attribute name="conn_endpoints"> + <dia:point val="28.273,3.99002"/> + <dia:point val="22.5231,1.72417"/> + </dia:attribute> + <dia:attribute name="numcp"> + <dia:int val="1"/> + </dia:attribute> + <dia:attribute name="line_width"> + <dia:real val="0.070000000000000007"/> + </dia:attribute> + <dia:attribute name="start_arrow"> + <dia:enum val="22"/> + </dia:attribute> + <dia:attribute name="start_arrow_length"> + <dia:real val="0.5"/> + </dia:attribute> + <dia:attribute name="start_arrow_width"> + <dia:real val="0.5"/> + </dia:attribute> + <dia:attribute name="end_arrow"> + <dia:enum val="22"/> + </dia:attribute> + <dia:attribute name="end_arrow_length"> + <dia:real val="0.5"/> + </dia:attribute> + <dia:attribute name="end_arrow_width"> + <dia:real val="0.5"/> + </dia:attribute> + </dia:object> + <dia:object type="Standard - Text" version="1" id="O17"> + <dia:attribute name="obj_pos"> + <dia:point val="28.2392,7.64919"/> + </dia:attribute> + <dia:attribute name="obj_bb"> + <dia:rectangle val="28.2392,6.95919;29.7892,7.85419"/> + </dia:attribute> + <dia:attribute name="text"> + <dia:composite type="text"> + <dia:attribute name="string"> + <dia:string>#Node#</dia:string> + </dia:attribute> + <dia:attribute name="font"> + <dia:font family="sans" style="0" name="Helvetica"/> + </dia:attribute> + <dia:attribute name="height"> + <dia:real val="0.80000000000000004"/> + </dia:attribute> + <dia:attribute name="pos"> + <dia:point val="28.2392,7.64919"/> + </dia:attribute> + <dia:attribute name="color"> + <dia:color val="#000000ff"/> + </dia:attribute> + <dia:attribute name="alignment"> + <dia:enum val="0"/> + </dia:attribute> + </dia:composite> + </dia:attribute> + <dia:attribute name="valign"> + <dia:enum val="3"/> + </dia:attribute> + </dia:object> + <dia:object type="Cisco - Antenna" version="1" id="O18"> + <dia:attribute name="obj_pos"> + <dia:point val="28.4588,1.12127"/> + </dia:attribute> + <dia:attribute name="obj_bb"> + <dia:rectangle val="28.3739,1.03641;30.7282,3.68681"/> + </dia:attribute> + <dia:attribute name="meta"> + <dia:composite type="dict"/> + </dia:attribute> + <dia:attribute name="elem_corner"> + <dia:point val="28.4588,1.12127"/> + </dia:attribute> + <dia:attribute name="elem_width"> + <dia:real val="2.1845405088777148"/> + </dia:attribute> + <dia:attribute name="elem_height"> + <dia:real val="2.5655417860204972"/> + </dia:attribute> + <dia:attribute name="line_width"> + <dia:real val="0.059999999999999998"/> + </dia:attribute> + <dia:attribute name="line_colour"> + <dia:color val="#000000ff"/> + </dia:attribute> + <dia:attribute name="fill_colour"> + <dia:color val="#000000ff"/> + </dia:attribute> + <dia:attribute name="show_background"> + <dia:boolean val="true"/> + </dia:attribute> + <dia:attribute name="line_style"> + <dia:enum val="0"/> + <dia:real val="1"/> + </dia:attribute> + <dia:attribute name="flip_horizontal"> + <dia:boolean val="false"/> + </dia:attribute> + <dia:attribute name="flip_vertical"> + <dia:boolean val="false"/> + </dia:attribute> + <dia:attribute name="subscale"> + <dia:real val="1"/> + </dia:attribute> + </dia:object> + <dia:object type="Standard - Arc" version="0" id="O19"> + <dia:attribute name="obj_pos"> + <dia:point val="32.7372,-2.60487"/> + </dia:attribute> + <dia:attribute name="obj_bb"> + <dia:rectangle val="31.9902,-2.66521;34.2286,3.38497"/> + </dia:attribute> + <dia:attribute name="conn_endpoints"> + <dia:point val="32.7372,-2.60487"/> + <dia:point val="34.1683,3.32463"/> + </dia:attribute> + <dia:attribute name="arc_color"> + <dia:color val="#cc9f9fff"/> + </dia:attribute> + <dia:attribute name="curve_distance"> + <dia:real val="1.3338574205540243"/> + </dia:attribute> + </dia:object> + <dia:object type="Standard - Arc" version="0" id="O20"> + <dia:attribute name="obj_pos"> + <dia:point val="31.5926,-3.36268"/> + </dia:attribute> + <dia:attribute name="obj_bb"> + <dia:rectangle val="30.6133,-3.42302;33.5611,4.60366"/> + </dia:attribute> + <dia:attribute name="conn_endpoints"> + <dia:point val="31.5926,-3.36268"/> + <dia:point val="33.5008,4.54332"/> + </dia:attribute> + <dia:attribute name="arc_color"> + <dia:color val="#cc9f9fff"/> + </dia:attribute> + <dia:attribute name="curve_distance"> + <dia:real val="1.778476560738703"/> + </dia:attribute> + </dia:object> + <dia:object type="Standard - Arc" version="0" id="O21"> + <dia:attribute name="obj_pos"> + <dia:point val="30.4584,-4.13699"/> + </dia:attribute> + <dia:attribute name="obj_bb"> + <dia:rectangle val="29.2467,-4.19733;32.9039,5.80585"/> + </dia:attribute> + <dia:attribute name="conn_endpoints"> + <dia:point val="30.4584,-4.13699"/> + <dia:point val="32.8436,5.74551"/> + </dia:attribute> + <dia:attribute name="arc_color"> + <dia:color val="#cc9f9fff"/> + </dia:attribute> + <dia:attribute name="curve_distance"> + <dia:real val="2.2230957009233752"/> + </dia:attribute> + </dia:object> + <dia:object type="Standard - Text" version="1" id="O22"> + <dia:attribute name="obj_pos"> + <dia:point val="23.387,1.42159"/> + </dia:attribute> + <dia:attribute name="obj_bb"> + <dia:rectangle val="23.3138,0.808571;28.264,3.45318"/> + </dia:attribute> + <dia:attribute name="text"> + <dia:composite type="text"> + <dia:attribute name="string"> + <dia:string>#Remote Resource#</dia:string> + </dia:attribute> + <dia:attribute name="font"> + <dia:font family="sans" style="0" name="Helvetica"/> + </dia:attribute> + <dia:attribute name="height"> + <dia:real val="0.76482221393664818"/> + </dia:attribute> + <dia:attribute name="pos"> + <dia:point val="23.387,1.42159"/> + </dia:attribute> + <dia:attribute name="color"> + <dia:color val="#000000ff"/> + </dia:attribute> + <dia:attribute name="alignment"> + <dia:enum val="0"/> + </dia:attribute> + </dia:composite> + </dia:attribute> + <dia:attribute name="valign"> + <dia:enum val="3"/> + </dia:attribute> + <dia:attribute name="text_angle"> + <dia:real val="21.75"/> + </dia:attribute> + </dia:object> + <dia:object type="Standard - Text" version="1" id="O23"> + <dia:attribute name="obj_pos"> + <dia:point val="10.4552,7.00741"/> + </dia:attribute> + <dia:attribute name="obj_bb"> + <dia:rectangle val="10.003,2.32823;15.0536,7.15126"/> + </dia:attribute> + <dia:attribute name="text"> + <dia:composite type="text"> + <dia:attribute name="string"> + <dia:string>#BIMU™ (ビム) Stream#</dia:string> + </dia:attribute> + <dia:attribute name="font"> + <dia:font family="sans" style="0" name="Helvetica"/> + </dia:attribute> + <dia:attribute name="height"> + <dia:real val="0.76482221393664818"/> + </dia:attribute> + <dia:attribute name="pos"> + <dia:point val="10.4552,7.00741"/> + </dia:attribute> + <dia:attribute name="color"> + <dia:color val="#000000ff"/> + </dia:attribute> + <dia:attribute name="alignment"> + <dia:enum val="0"/> + </dia:attribute> + </dia:composite> + </dia:attribute> + <dia:attribute name="valign"> + <dia:enum val="3"/> + </dia:attribute> + <dia:attribute name="text_angle"> + <dia:real val="-43.25"/> + </dia:attribute> + </dia:object> + <dia:object type="Standard - Text" version="1" id="O24"> + <dia:attribute name="obj_pos"> + <dia:point val="18.5927,9.60105"/> + </dia:attribute> + <dia:attribute name="obj_bb"> + <dia:rectangle val="18.5927,8.91105;18.5927,9.80605"/> + </dia:attribute> + <dia:attribute name="text"> + <dia:composite type="text"> + <dia:attribute name="string"> + <dia:string>##</dia:string> + </dia:attribute> + <dia:attribute name="font"> + <dia:font family="sans" style="0" name="Helvetica"/> + </dia:attribute> + <dia:attribute name="height"> + <dia:real val="0.80000000000000004"/> + </dia:attribute> + <dia:attribute name="pos"> + <dia:point val="18.5927,9.60105"/> + </dia:attribute> + <dia:attribute name="color"> + <dia:color val="#000000ff"/> + </dia:attribute> + <dia:attribute name="alignment"> + <dia:enum val="0"/> + </dia:attribute> + </dia:composite> + </dia:attribute> + <dia:attribute name="valign"> + <dia:enum val="3"/> + </dia:attribute> + </dia:object> + <dia:object type="Standard - Text" version="1" id="O25"> + <dia:attribute name="obj_pos"> + <dia:point val="15.4803,8.49876"/> + </dia:attribute> + <dia:attribute name="obj_bb"> + <dia:rectangle val="15.4803,7.83876;20.4928,8.69626"/> + </dia:attribute> + <dia:attribute name="text"> + <dia:composite type="text"> + <dia:attribute name="string"> + <dia:string>#System Interface#</dia:string> + </dia:attribute> + <dia:attribute name="font"> + <dia:font family="sans" style="0" name="Helvetica"/> + </dia:attribute> + <dia:attribute name="height"> + <dia:real val="0.76482221393664818"/> + </dia:attribute> + <dia:attribute name="pos"> + <dia:point val="15.4803,8.49876"/> + </dia:attribute> + <dia:attribute name="color"> + <dia:color val="#000000ff"/> + </dia:attribute> + <dia:attribute name="alignment"> + <dia:enum val="0"/> + </dia:attribute> + </dia:composite> + </dia:attribute> + <dia:attribute name="valign"> + <dia:enum val="3"/> + </dia:attribute> + </dia:object> + </dia:layer> +</dia:diagram> diff --git a/doc/design.txt b/doc/design.txt index d06679c..95d8b48 100644 --- a/doc/design.txt +++ b/doc/design.txt @@ -1,5 +1,9 @@ +:stylesheet: style.css + = CAMU - Self-Hosted Media Streamer/Organizer/Archiver +image::design_diagram.svg[Diagram,820] + Breif on Components ------------------- Server diff --git a/doc/design_diagram.svg b/doc/design_diagram.svg new file mode 100644 index 0000000..1c2ed04 --- /dev/null +++ b/doc/design_diagram.svg @@ -0,0 +1,503 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg width="33cm" height="20cm" viewBox="95 -84 647 390" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <g id="Background"/> + <g id="Background"/> + <g id="Background"/> + <g id="Background"/> + <g id="Background"/> + <g id="Background"/> + <g id="Background"> + <g> + <line style="fill: none; stroke-opacity: 1; stroke-width: 1.4; stroke: #000000" x1="262.638" y1="205.08" x2="343.595" y2="108.156"/> + <polygon style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 1.4; stroke: #000000" fill-rule="evenodd" points="348.403,102.4 345.829,113.28 343.595,108.156 338.155,106.87 "/> + </g> + <g> + <path style="fill: #7a7a5a; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 248.153 228.367 C 248.556,226.928 250.212,219.715 250.289,218.709 C 250.366,217.703 249.995,216.449 249.453,216.186 C 249.484,215.83 249.484,215.629 249.484,215.629 C 249.36,215.582 249.221,215.536 249.097,215.474 L 249.144,215.489 C 249.144,215.489 249.515,213.88 249.747,212.765 C 250.165,210.629 250.212,209.546 250.212,209.546 C 250.196,209.252 250.119,208.989 249.856,208.911 L 248.602,208.571 C 248.339,208.493 248.153,208.664 247.983,208.927 C 247.983,208.927 247.488,209.917 246.807,211.96 C 246.435,213.028 246.095,214.39 246.095,214.39 L 246.11,214.39 C 245.367,214.143 244.609,213.926 243.85,213.709 C 241.9,213.168 239.965,212.765 238.015,212.471 C 238.015,212.471 237.922,212.641 237.752,212.967 C 237.164,212.905 236.204,213.802 235.755,214.7 C 235.306,215.598 233.031,222.64 232.629,224.08 C 232.226,225.519 231.468,229.203 231.127,231.029 C 230.787,232.856 230.477,236.044 229.301,240.285 C 228.605,242.792 227.49,246.538 226.902,248.086 C 226.747,248.504 225.524,250.562 227.304,251.274 C 229.053,251.971 231.669,252.714 232.985,253.085 C 234.3,253.441 236.916,254.138 238.774,254.447 C 240.662,254.757 240.677,252.342 240.755,251.909 C 241.049,250.284 242.008,246.492 242.689,243.984 C 243.866,239.728 245.243,236.849 245.893,235.1 C 246.528,233.351 247.751,229.806 248.153,228.367z"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #000000" d="M 248.153 228.367 C 248.556,226.928 250.212,219.715 250.289,218.709 C 250.366,217.703 249.995,216.449 249.453,216.186 C 249.484,215.83 249.484,215.629 249.484,215.629 C 249.36,215.582 249.221,215.536 249.097,215.474 L 249.144,215.489 C 249.144,215.489 249.515,213.88 249.747,212.765 C 250.165,210.629 250.212,209.546 250.212,209.546 C 250.196,209.252 250.119,208.989 249.856,208.911 L 248.602,208.571 C 248.339,208.493 248.153,208.664 247.983,208.927 C 247.983,208.927 247.488,209.917 246.807,211.96 C 246.435,213.028 246.095,214.39 246.095,214.39 L 246.11,214.39 C 245.367,214.143 244.609,213.926 243.85,213.709 C 241.9,213.168 239.965,212.765 238.015,212.471 C 238.015,212.471 237.922,212.641 237.752,212.967 L 237.752,212.967 C 237.164,212.905 236.204,213.802 235.755,214.7 C 235.306,215.598 233.031,222.64 232.629,224.08 C 232.226,225.519 231.468,229.203 231.127,231.029 C 230.787,232.856 230.477,236.044 229.301,240.285 C 228.605,242.792 227.49,246.538 226.902,248.086 C 226.747,248.504 225.524,250.562 227.304,251.274 C 229.053,251.971 231.669,252.714 232.985,253.085 C 234.3,253.441 236.916,254.138 238.774,254.447 C 240.662,254.757 240.677,252.342 240.755,251.909 C 241.049,250.284 242.008,246.492 242.689,243.984 C 243.866,239.728 245.243,236.849 245.893,235.1 C 246.528,233.351 247.751,229.806 248.153,228.367"/> + <path style="fill: #b7b79d; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 246.218 228.553 C 246.621,227.113 248.277,219.901 248.354,218.91 C 248.432,217.904 248.06,216.635 247.519,216.387 C 247.549,216.031 247.549,215.83 247.549,215.83 C 247.426,215.768 247.286,215.722 247.163,215.675 L 247.193,215.691 C 247.193,215.691 247.58,214.081 247.813,212.967 C 248.23,210.815 248.261,209.732 248.261,209.732 C 248.261,209.438 248.184,209.19 247.921,209.113 L 246.667,208.772 C 246.404,208.695 246.218,208.865 246.048,209.128 C 246.048,209.128 245.553,210.119 244.872,212.146 C 244.5,213.23 244.16,214.576 244.16,214.576 L 244.175,214.592 C 243.432,214.344 242.674,214.112 241.916,213.911 C 239.965,213.369 238.015,212.951 236.08,212.657 C 236.08,212.657 235.987,212.843 235.817,213.152 C 235.229,213.106 234.269,213.988 233.821,214.886 C 233.372,215.783 231.096,222.826 230.694,224.281 C 230.292,225.72 229.533,229.389 229.193,231.215 C 228.852,233.041 228.543,236.23 227.366,240.486 C 226.67,242.994 225.555,246.724 224.967,248.287 C 224.812,248.689 223.59,250.764 225.37,251.476 C 227.119,252.157 229.734,252.915 231.05,253.271 C 232.366,253.642 234.981,254.323 236.839,254.633 C 238.727,254.943 238.743,252.543 238.82,252.11 C 239.114,250.469 240.074,246.693 240.755,244.185 C 241.931,239.929 243.309,237.035 243.959,235.286 C 244.593,233.552 245.816,230.008 246.218,228.553z"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #000000" d="M 246.218 228.553 C 246.621,227.113 248.277,219.901 248.354,218.91 C 248.432,217.904 248.06,216.635 247.519,216.387 C 247.549,216.031 247.549,215.83 247.549,215.83 C 247.426,215.768 247.286,215.722 247.163,215.675 L 247.193,215.691 C 247.193,215.691 247.58,214.081 247.813,212.967 C 248.23,210.815 248.261,209.732 248.261,209.732 C 248.261,209.438 248.184,209.19 247.921,209.113 L 246.667,208.772 C 246.404,208.695 246.218,208.865 246.048,209.128 C 246.048,209.128 245.553,210.119 244.872,212.146 C 244.5,213.23 244.16,214.576 244.16,214.576 L 244.175,214.592 C 243.432,214.344 242.674,214.112 241.916,213.911 C 239.965,213.369 238.015,212.951 236.08,212.657 C 236.08,212.657 235.987,212.843 235.817,213.152 L 235.817,213.152 C 235.229,213.106 234.269,213.988 233.821,214.886 C 233.372,215.783 231.096,222.826 230.694,224.281 C 230.292,225.72 229.533,229.389 229.193,231.215 C 228.852,233.041 228.543,236.23 227.366,240.486 C 226.67,242.994 225.555,246.724 224.967,248.287 C 224.812,248.689 223.59,250.764 225.37,251.476 C 227.119,252.157 229.734,252.915 231.05,253.271 C 232.366,253.642 234.981,254.323 236.839,254.633 C 238.727,254.943 238.743,252.543 238.82,252.11 C 239.114,250.469 240.074,246.693 240.755,244.185 C 241.931,239.929 243.309,237.035 243.959,235.286 C 244.593,233.552 245.816,230.008 246.218,228.553"/> + <path style="fill: #c9c9b6; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.8; stroke: #ecece7" fill-rule="evenodd" d="M 236.328 212.703 C 236.328,212.703 233.774,217.919 232.304,223.213 C 230.57,229.512 230.323,231.602 230.586,234.527 C 230.632,235.131 231.236,235.874 231.901,236.06 C 232.164,236.121 232.474,236.214 232.598,236.245 C 232.737,236.292 233.232,236.4 233.635,236.725 C 234.053,237.05 234.146,237.128 234.393,237.251 C 234.625,237.391 234.672,237.483 235.353,237.669 C 236.034,237.855 236.111,237.809 236.39,237.809 C 236.669,237.824 236.792,237.809 237.319,237.747 C 237.829,237.669 238.309,237.824 238.448,237.855 C 238.572,237.901 238.882,237.979 239.145,238.056 C 239.811,238.242 240.708,237.917 241.064,237.422 C 242.782,235.053 243.649,233.119 245.383,226.819 C 246.837,221.526 247.317,215.737 247.317,215.737 L 236.328,212.703z"/> + <path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 239.424 234.558 C 238.975,236.214 237.257,237.174 235.616,236.725 C 233.96,236.276 233,234.558 233.449,232.918 C 233.913,231.261 235.616,230.302 237.257,230.751 C 238.913,231.215 239.872,232.918 239.424,234.558z"/> + <path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 233.712 229.481 C 234.13,229.605 234.455,229.776 234.61,229.868 C 234.765,229.977 234.811,230.116 234.672,230.209 C 234.533,230.302 234.285,230.487 234.146,230.611 C 233.975,230.751 233.867,230.782 233.635,230.642 C 233.217,230.41 232.335,229.776 232.118,229.481 C 231.994,229.327 232.103,229.265 232.335,229.249 C 232.644,229.234 233.263,229.358 233.712,229.481z"/> + <path style="fill: #ff0000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 231.514 232.747 C 231.747,232.825 232.304,233.103 232.459,233.227 C 232.629,233.335 232.876,233.599 232.861,233.908 C 232.83,234.264 232.861,235.023 233.016,235.27 C 233.217,235.595 233.186,235.734 232.892,235.688 C 232.66,235.642 232.056,235.425 231.886,235.332 C 231.716,235.255 231.468,235.1 231.391,234.868 C 231.236,234.388 231.189,233.397 231.282,232.902 C 231.313,232.701 231.406,232.701 231.514,232.747z"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 239.424 234.558 C 238.975,236.214 237.257,237.174 235.616,236.725 C 233.96,236.276 233,234.558 233.449,232.918 C 233.913,231.261 235.616,230.302 237.257,230.751 C 238.913,231.215 239.872,232.918 239.424,234.558"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 233.712 229.481 C 234.13,229.605 234.455,229.776 234.61,229.868 C 234.765,229.977 234.811,230.116 234.672,230.209 C 234.533,230.302 234.285,230.487 234.146,230.611 C 233.975,230.751 233.867,230.782 233.635,230.642 C 233.217,230.41 232.335,229.776 232.118,229.481 C 231.994,229.327 232.103,229.265 232.335,229.249 C 232.644,229.234 233.263,229.358 233.712,229.481"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 231.514 232.747 C 231.747,232.825 232.304,233.103 232.459,233.227 C 232.629,233.335 232.876,233.599 232.861,233.908 C 232.83,234.264 232.861,235.023 233.016,235.27 C 233.217,235.595 233.186,235.734 232.892,235.688 C 232.66,235.642 232.056,235.425 231.886,235.332 C 231.716,235.255 231.468,235.1 231.391,234.868 C 231.236,234.388 231.189,233.397 231.282,232.902 C 231.313,232.701 231.406,232.701 231.514,232.747"/> + <path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 240.956 231.478 C 240.538,231.37 240.182,231.354 239.996,231.354 C 239.811,231.37 239.702,231.463 239.764,231.602 C 239.841,231.757 239.965,232.051 240.012,232.221 C 240.089,232.422 240.167,232.515 240.43,232.531 C 240.909,232.531 241.993,232.438 242.333,232.298 C 242.504,232.221 242.442,232.113 242.256,231.989 C 241.993,231.819 241.405,231.602 240.956,231.478z"/> + <path style="fill: #00ff00; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 241.173 235.409 C 240.94,235.348 240.306,235.317 240.105,235.332 C 239.919,235.348 239.563,235.44 239.424,235.719 C 239.269,236.044 238.851,236.679 238.588,236.818 C 238.247,236.988 238.201,237.128 238.479,237.22 C 238.696,237.313 239.331,237.437 239.516,237.453 C 239.718,237.468 239.996,237.468 240.182,237.298 C 240.584,236.973 241.111,236.137 241.296,235.673 C 241.374,235.487 241.296,235.44 241.173,235.409z"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 240.956 231.478 C 240.538,231.37 240.182,231.354 239.996,231.354 C 239.811,231.37 239.702,231.463 239.764,231.602 C 239.841,231.757 239.965,232.051 240.012,232.221 C 240.089,232.422 240.167,232.515 240.43,232.531 C 240.909,232.531 241.993,232.438 242.333,232.298 C 242.504,232.221 242.442,232.113 242.256,231.989 C 241.993,231.819 241.405,231.602 240.956,231.478"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 241.173 235.409 C 240.94,235.348 240.306,235.317 240.105,235.332 C 239.919,235.348 239.563,235.44 239.424,235.719 C 239.269,236.044 238.851,236.679 238.588,236.818 C 238.247,236.988 238.201,237.128 238.479,237.22 C 238.696,237.313 239.331,237.437 239.516,237.453 C 239.718,237.468 239.996,237.468 240.182,237.298 C 240.584,236.973 241.111,236.137 241.296,235.673 C 241.374,235.487 241.296,235.44 241.173,235.409"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 240.662 217.532 L 241.683,213.833"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 241.002 217.625 L 242.024,213.926"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #000000" d="M 248.261 209.577 C 248.261,209.577 247.673,209.407 247.178,209.283 C 246.745,209.159 246.126,208.989 246.126,208.989"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #000000" d="M 246.218 228.553 C 246.621,227.113 248.277,219.901 248.354,218.91 C 248.432,217.904 248.06,216.635 247.519,216.387 C 247.549,216.031 247.549,215.83 247.549,215.83 C 247.426,215.768 247.286,215.722 247.163,215.675 L 247.193,215.691 C 247.193,215.691 247.58,214.081 247.813,212.967 C 248.23,210.815 248.261,209.732 248.261,209.732 C 248.261,209.438 248.184,209.19 247.921,209.113 L 246.667,208.772 C 246.404,208.695 246.218,208.865 246.048,209.128 C 246.048,209.128 245.553,210.119 244.872,212.146 C 244.5,213.23 244.16,214.576 244.16,214.576 L 244.175,214.592 C 243.432,214.344 242.674,214.112 241.916,213.911 C 239.965,213.369 238.015,212.951 236.08,212.657 C 236.08,212.657 235.987,212.843 235.817,213.152 L 235.817,213.152 C 235.229,213.106 234.269,213.988 233.821,214.886 C 233.372,215.783 231.096,222.826 230.694,224.281 C 230.292,225.72 229.533,229.389 229.193,231.215 C 228.852,233.041 228.543,236.23 227.366,240.486 C 226.67,242.994 225.555,246.724 224.967,248.287 C 224.812,248.689 223.59,250.764 225.37,251.476 C 227.119,252.157 229.734,252.915 231.05,253.271 C 232.366,253.642 234.981,254.323 236.839,254.633 C 238.727,254.943 238.743,252.543 238.82,252.11 C 239.114,250.469 240.074,246.693 240.755,244.185 C 241.931,239.929 243.309,237.035 243.959,235.286 C 244.593,233.552 245.816,230.008 246.218,228.553"/> + <path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 232.598 238.675 C 232.397,239.403 231.638,239.836 230.895,239.635 C 230.152,239.434 229.719,238.675 229.92,237.932 C 230.137,237.189 230.895,236.756 231.638,236.957 C 232.381,237.158 232.815,237.932 232.598,238.675z"/> + <path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 236.111 240.146 C 235.91,240.889 235.136,241.322 234.393,241.121 C 233.666,240.92 233.232,240.146 233.434,239.418 C 233.635,238.675 234.393,238.242 235.136,238.443 C 235.879,238.644 236.313,239.418 236.111,240.146z"/> + <path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 239.888 240.687 C 239.687,241.415 238.913,241.848 238.17,241.647 C 237.442,241.446 237.009,240.687 237.21,239.944 C 237.411,239.202 238.17,238.768 238.913,238.969 C 239.656,239.171 240.089,239.944 239.888,240.687z"/> + <path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 231.762 241.724 C 231.561,242.467 230.787,242.901 230.059,242.684 C 229.317,242.483 228.883,241.724 229.084,240.982 C 229.286,240.239 230.059,239.805 230.787,240.006 C 231.53,240.223 231.963,240.982 231.762,241.724z"/> + <path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 235.26 243.21 C 235.059,243.953 234.3,244.387 233.557,244.17 C 232.815,243.969 232.381,243.21 232.582,242.467 C 232.799,241.724 233.557,241.291 234.3,241.492 C 235.028,241.709 235.477,242.467 235.26,243.21z"/> + <path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 239.052 243.737 C 238.835,244.464 238.077,244.913 237.334,244.696 C 236.591,244.495 236.158,243.737 236.359,242.994 C 236.576,242.251 237.334,241.817 238.077,242.019 C 238.82,242.235 239.253,242.994 239.052,243.737z"/> + <path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 230.926 244.774 C 230.725,245.517 229.951,245.95 229.208,245.749 C 228.481,245.547 228.032,244.774 228.249,244.031 C 228.45,243.303 229.208,242.854 229.951,243.071 C 230.694,243.272 231.127,244.031 230.926,244.774z"/> + <path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 234.424 246.259 C 234.223,247.002 233.449,247.436 232.722,247.235 C 231.979,247.033 231.545,246.259 231.747,245.517 C 231.948,244.774 232.722,244.356 233.449,244.557 C 234.192,244.758 234.625,245.517 234.424,246.259z"/> + <path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 238.201 246.786 C 238,247.529 237.226,247.962 236.498,247.745 C 235.755,247.544 235.322,246.786 235.523,246.043 C 235.724,245.3 236.498,244.866 237.226,245.083 C 237.969,245.284 238.402,246.043 238.201,246.786z"/> + <path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 230.075 247.823 C 229.874,248.566 229.1,248.999 228.372,248.798 C 227.629,248.597 227.196,247.838 227.397,247.095 C 227.598,246.352 228.372,245.919 229.1,246.12 C 229.843,246.321 230.276,247.095 230.075,247.838 L 230.075,247.823z"/> + <path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 233.588 249.309 C 233.372,250.052 232.613,250.485 231.87,250.284 C 231.127,250.083 230.694,249.309 230.911,248.581 C 231.112,247.838 231.87,247.405 232.613,247.606 C 233.356,247.807 233.79,248.581 233.588,249.309z"/> + <path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 237.365 249.835 C 237.148,250.578 236.39,251.011 235.647,250.81 C 234.904,250.609 234.471,249.835 234.687,249.092 C 234.889,248.364 235.647,247.931 236.39,248.132 C 237.133,248.334 237.566,249.092 237.365,249.835z"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 231.824 251.383 C 231.808,251.445 231.685,251.476 231.545,251.445 C 231.421,251.398 231.329,251.321 231.36,251.243 C 231.375,251.181 231.499,251.15 231.623,251.181 C 231.747,251.212 231.839,251.305 231.824,251.367"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 231.36 251.243 L 230.911,252.838"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 231.421 251.383 L 231.019,252.869"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 231.824 251.383 L 231.375,252.961"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 231.685 251.445 L 231.282,252.93"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 234.502 228.367 L 234.192,229.466"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 234.625 228.398 L 234.316,229.512"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 240.863 230.116 L 240.553,231.23"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 240.739 230.085 L 240.43,231.199"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #000000" d="M 247.193 215.691 C 247.193,215.691 247.58,214.081 247.813,212.967 C 248.23,210.815 248.261,209.732 248.261,209.732 C 248.261,209.438 248.184,209.19 247.921,209.113 L 246.667,208.772 C 246.404,208.695 246.218,208.865 246.048,209.128 C 246.048,209.128 245.553,210.119 244.872,212.146 C 244.5,213.23 244.16,214.576 244.16,214.576"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #000000" d="M 247.348 215.102 C 246.342,214.716 245.336,214.36 244.299,214.034"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 234.827 215.319 C 236.885,215.613 239.099,216.078 241.157,216.65 C 243.216,217.223 245.352,217.95 247.271,218.755"/> + <path style="fill: #b7b79d; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" fill-rule="evenodd" d="M 243.665 230.364 C 243.587,230.642 243.309,230.797 243.03,230.72 L 232.319,227.763 C 232.041,227.686 231.886,227.407 231.963,227.144 L 233.836,220.365 C 233.913,220.086 234.192,219.932 234.455,220.009 L 245.181,222.965 C 245.46,223.043 245.615,223.321 245.537,223.6 L 243.665,230.379 L 243.665,230.364z"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 240.662 217.532 L 241.683,213.833"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 241.002 217.625 L 242.024,213.926"/> + </g> + <g> + <path style="fill: #b7b79d; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 351.906 -19.988 L 351.906,84.9483 L 417.301,84.9483 L 417.301,-19.988 L 351.906,-19.988z"/> + <path style="fill: #b7b79d; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 352.263 -19.5895 L 352.263,85.3469 L 417.658,85.3469 L 417.658,-19.5895 L 352.263,-19.5895z"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #494936" d="M 352.263 -19.5895 L 352.263,85.3469 L 417.658,85.3469 L 417.658,-19.5895 L 352.263,-19.5895"/> + <path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 356.249 8.32485 L 382.143,8.32485 L 382.143,17.4922 L 356.249,17.4922 L 356.249,8.32485z"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #ecece7" d="M 356.249 8.32485 L 382.129,8.32485 L 382.129,17.4784 L 356.249,17.4784 L 356.249,8.32485"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #494936" d="M 356.634 17.1073 L 356.634,8.69594 L 381.744,8.69594"/> + <path style="fill: #c9c9b6; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 351.906 -19.988 L 375.463,-43.6554 L 440.885,-43.6554 L 417.301,-19.988 L 351.906,-19.988z"/> + <path style="fill: #c9c9b6; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 352.263 -19.5895 L 375.862,-43.2981 L 441.257,-43.2981 L 417.658,-19.5895 L 352.263,-19.5895z"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #494936" d="M 352.263 -19.5895 L 375.862,-43.2981 L 441.257,-43.2981 L 417.658,-19.5895 L 352.263,-19.5895"/> + <path style="fill: #7a7a5a; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 417.301 84.9483 L 440.885,61.2397 L 440.885,-43.6554 L 417.301,-19.988 L 417.301,84.9483z"/> + <path style="fill: #7a7a5a; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 417.658 85.3469 L 441.257,61.6383 L 441.257,-43.2981 L 417.658,-19.5895 L 417.658,85.3469z"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #494936" d="M 417.658 85.3469 L 441.257,61.6383 L 441.257,-43.2981 L 417.658,-19.5895 L 417.658,85.3469"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 2.24; stroke: #ecece7" d="M 417.301 -8.12686 L 352.662,-8.12686"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 2.24; stroke: #494936" d="M 417.301 -8.89653 L 352.662,-8.89653"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 3.06; stroke: #ecece7" d="M 415.761 -7.34344 L 415.775,-7.35719"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 3.06; stroke: #494936" d="M 415.761 -8.12686 L 415.775,-8.1406"/> + <path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 386.692 8.32485 L 412.559,8.32485 L 412.559,17.4922 L 386.692,17.4922 L 386.692,8.32485z"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #ecece7" d="M 386.692 8.32485 L 412.545,8.32485 L 412.545,17.4784 L 386.692,17.4784 L 386.692,8.32485"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #494936" d="M 387.05 17.1073 L 387.05,8.69594 L 412.16,8.69594"/> + </g> + <g> + <path style="fill: #800000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 1.8; stroke: #000000" fill-rule="evenodd" d="M 389.113 -37.349 C 389.113,-37.349 389.113,-47.3734 389.113,-47.3734 C 389.113,-47.3734 392.454,-47.3734 392.454,-47.3734 C 392.454,-47.3734 392.454,-37.349 392.454,-37.349 C 392.454,-37.349 392.037,-36.5136 390.784,-36.5136 C 389.531,-36.5136 389.113,-37.349 389.113,-37.349z"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 1.8; stroke: #000000" d="M 389.113 -37.349 C 389.113,-37.349 389.113,-47.3734 389.113,-47.3734 C 389.113,-47.3734 392.454,-47.3734 392.454,-47.3734 C 392.454,-47.3734 392.454,-37.349 392.454,-37.349 C 392.454,-37.349 392.037,-36.5136 390.784,-36.5136 C 389.531,-36.5136 389.113,-37.349 389.113,-37.349"/> + <polygon style="fill: #008000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 1.8; stroke: #000000" fill-rule="evenodd" points="384.101,-64.0807 386.607,-64.0807 384.101,-57.3977 386.607,-57.3977 384.101,-50.7148 385.771,-50.7148 382.43,-47.3734 399.137,-47.3734 395.796,-50.7148 397.467,-50.7148 394.96,-57.3977 397.467,-57.3977 394.96,-64.0807 397.467,-64.0807 390.784,-70.7636 "/> + <polygon style="fill: none; stroke-opacity: 1; stroke-width: 1.8; stroke: #00ff00" points="384.101,-64.0807 386.607,-64.0807 384.101,-57.3977 386.607,-57.3977 384.101,-50.7148 385.771,-50.7148 382.43,-47.3734 399.137,-47.3734 395.796,-50.7148 397.467,-50.7148 394.96,-57.3977 397.467,-57.3977 394.96,-64.0807 397.467,-64.0807 390.784,-70.7636 "/> + </g> + <g> + <path style="fill: #c9c9b8; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #000000" fill-rule="evenodd" d="M 179.448 263.636 L 187.326,263.636 L 178.986,305.797 L 190.334,305.797 L 197.204,274.988 C 197.204,274.988 200.754,299.083 202.377,305.565 C 204.185,305.565 210.681,305.565 214.422,305.565 C 213.725,302.785 207.474,267.114 207.239,263.405 C 208.168,263.405 213.265,263.871 214.885,263.636 C 214.885,261.785 213.497,252.288 213.497,249.971 C 213.497,247.653 211.411,237.231 210.717,234.913 C 210.114,232.906 206.086,229.819 204,229.125 C 201.911,228.428 197.742,228.659 195.428,228.659 C 193.111,228.659 190.539,229.246 188.245,229.816 C 186.394,230.282 184.308,233.287 183.614,235.145 C 182.916,236.996 181.994,242.791 181.3,245.568 C 180.599,248.348 180.371,258.774 179.905,260.393 C 179.442,262.013 179.442,263.636 179.442,263.636 L 179.448,263.636z"/> + <path style="fill: #ffffff; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 201.611 228.734 C 200.757,228.659 199.372,228.734 198.058,228.659 C 196.748,228.584 194.812,228.659 193.89,228.734 C 192.961,228.809 190.722,229.353 190.49,229.353 C 190.262,229.353 190.106,229.2 190.106,229.2 L 195.666,248.964 L 203.693,229.2 C 203.648,228.633 203.032,228.991 202.654,228.776 L 201.611,228.734z"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 0.758; stroke: #ffffff" d="M 201.611 228.734 C 200.757,228.659 199.372,228.734 198.058,228.659 C 196.748,228.584 194.812,228.659 193.89,228.734 C 192.961,228.809 190.722,229.353 190.49,229.353 C 190.262,229.353 190.106,229.2 190.106,229.2 L 195.666,248.964 L 203.693,229.2 C 203.648,228.633 203.032,228.991 202.654,228.776"/> + <path style="fill: #c9c9b8; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #000000" fill-rule="evenodd" d="M 196.862 228.183 C 202.152,228.183 206.441,223.894 206.441,218.601 C 206.441,213.308 202.152,209.016 196.862,209.016 C 191.569,209.016 187.277,213.305 187.277,218.601 C 187.277,223.894 191.566,228.183 196.862,228.183z"/> + <path style="fill: #ffffff; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 196.728 226.179 C 200.701,226.179 203.915,222.962 203.915,218.992 C 203.915,215.023 200.701,211.806 196.728,211.806 C 192.762,211.806 189.542,215.023 189.542,218.992 C 189.542,222.962 192.762,226.179 196.728,226.179z"/> + </g> + <g> + <path style="fill: #e1ead5; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 135.941 168.866 L 109.444,168.866 L 109.277,168.866 L 109.124,168.88 L 108.964,168.893 L 108.804,168.928 L 108.665,168.963 L 108.512,169.005 L 108.366,169.053 L 108.227,169.102 L 108.088,169.179 L 107.956,169.234 L 107.824,169.318 L 107.699,169.401 L 107.574,169.491 L 107.455,169.575 L 107.344,169.672 L 107.233,169.783 L 107.129,169.888 L 107.024,170.006 L 106.934,170.124 L 106.851,170.242 L 106.774,170.367 L 106.698,170.513 L 106.635,170.646 L 106.566,170.785 L 106.517,170.924 L 106.461,171.077 L 106.426,171.223 L 106.392,171.369 L 106.357,171.529 L 106.329,171.688 L 106.322,171.848 L 106.322,172.008 L 106.322,188.876 L 106.322,189.043 L 106.329,189.203 L 106.357,189.355 L 106.392,189.515 L 106.426,189.661 L 106.461,189.821 L 106.517,189.96 L 106.566,190.099 L 106.635,190.245 L 106.698,190.378 L 106.774,190.51 L 106.851,190.642 L 106.934,190.753 L 107.024,190.878 L 107.129,190.996 L 107.233,191.101 L 107.344,191.212 L 107.455,191.309 L 107.574,191.393 L 107.699,191.483 L 107.824,191.566 L 107.956,191.643 L 108.088,191.719 L 108.227,191.782 L 108.366,191.831 L 108.512,191.879 L 108.665,191.921 L 108.804,191.963 L 108.964,191.991 L 109.124,192.005 L 109.277,192.025 L 109.444,192.025 L 135.941,192.025 L 136.101,192.025 L 136.268,192.005 L 136.421,191.991 L 136.574,191.963 L 136.727,191.921 L 136.873,191.879 L 137.026,191.831 L 137.158,191.782 L 137.304,191.719 L 137.436,191.643 L 137.568,191.566 L 137.693,191.483 L 137.818,191.393 L 137.936,191.309 L 138.048,191.212 L 138.152,191.101 L 138.256,190.996 L 138.354,190.878 L 138.444,190.753 L 138.534,190.642 L 138.618,190.51 L 138.694,190.378 L 138.757,190.245 L 138.819,190.099 L 138.875,189.96 L 138.931,189.821 L 138.965,189.661 L 139.007,189.515 L 139.028,189.355 L 139.056,189.203 L 139.063,189.043 L 139.063,188.876 L 139.063,172.008 L 139.063,171.848 L 139.056,171.688 L 139.028,171.529 L 139.007,171.369 L 138.965,171.223 L 138.931,171.077 L 138.875,170.924 L 138.819,170.785 L 138.757,170.646 L 138.694,170.513 L 138.618,170.367 L 138.534,170.242 L 138.444,170.124 L 138.354,170.006 L 138.256,169.888 L 138.152,169.783 L 138.048,169.672 L 137.936,169.575 L 137.818,169.491 L 137.693,169.401 L 137.568,169.318 L 137.436,169.234 L 137.304,169.179 L 137.158,169.102 L 137.026,169.053 L 136.873,169.005 L 136.727,168.963 L 136.574,168.928 L 136.421,168.893 L 136.268,168.88 L 136.101,168.866 L 135.941,168.866z"/> + <path style="fill: #c8c9b6; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 95.9138 190.266 L 100.718,197.177 L 142.386,197.177 L 135.51,190.266 L 95.9138,190.266z"/> + <path style="fill: #4e503e; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 100.718 197.268 L 100.628,197.226 L 95.8234,190.336 L 95.9973,190.218 L 100.795,197.115 L 100.718,197.268 L 100.718,197.268 L 100.656,197.268 L 100.628,197.226 L 100.718,197.268z"/> + <path style="fill: #4e503e; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 142.463 197.094 L 142.386,197.268 L 100.718,197.268 L 100.718,197.066 L 142.386,197.066 L 142.463,197.094 L 142.463,197.094 L 142.644,197.268 L 142.386,197.268 L 142.463,197.094z"/> + <path style="fill: #4e503e; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 135.51 190.169 L 135.586,190.204 L 142.463,197.094 L 142.31,197.247 L 135.433,190.35 L 135.51,190.169 L 135.51,190.169 L 135.552,190.169 L 135.586,190.204 L 135.51,190.169z"/> + <path style="fill: #4e503e; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 95.8234 190.336 L 95.9138,190.169 L 135.51,190.169 L 135.51,190.378 L 95.9138,190.378 L 95.8234,190.336 L 95.8234,190.336 L 95.7122,190.169 L 95.9138,190.169 L 95.8234,190.336z"/> + <path style="fill: #b6b79e; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 142.386 204.679 L 142.386,197.177 L 102.589,197.177 L 102.589,204.679 L 142.386,204.679z"/> + <path style="fill: #4e503e; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 142.386 197.066 L 142.498,197.177 L 142.498,204.679 L 142.289,204.679 L 142.289,197.177 L 142.386,197.066 L 142.386,197.066 L 142.498,197.066 L 142.498,197.177 L 142.386,197.066z"/> + <path style="fill: #4e503e; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 102.498 197.177 L 102.589,197.066 L 142.386,197.066 L 142.386,197.268 L 102.589,197.268 L 102.498,197.177 L 102.498,197.177 L 102.498,197.066 L 102.589,197.066 L 102.498,197.177z"/> + <path style="fill: #4e503e; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 102.589 204.784 L 102.498,204.679 L 102.498,197.177 L 102.707,197.177 L 102.707,204.679 L 102.589,204.784 L 102.589,204.784 L 102.498,204.784 L 102.498,204.679 L 102.589,204.784z"/> + <path style="fill: #4e503e; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 142.498 204.679 L 142.386,204.784 L 102.589,204.784 L 102.589,204.582 L 142.386,204.582 L 142.498,204.679 L 142.498,204.679 L 142.498,204.784 L 142.386,204.784 L 142.498,204.679z"/> + <path style="fill: #b6b79e; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 142.386 165.389 L 102.867,165.389 L 102.867,195.523 L 142.386,195.523 L 142.386,165.389z"/> + <path style="fill: #4e503e; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 102.762 165.389 L 102.867,165.285 L 142.386,165.285 L 142.386,165.494 L 102.867,165.494 L 102.762,165.389 L 102.762,165.389 L 102.762,165.285 L 102.867,165.285 L 102.762,165.389z"/> + <path style="fill: #4e503e; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 102.867 195.613 L 102.762,195.523 L 102.762,165.389 L 102.971,165.389 L 102.971,195.523 L 102.867,195.613 L 102.867,195.613 L 102.762,195.613 L 102.762,195.523 L 102.867,195.613z"/> + <path style="fill: #4e503e; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 142.498 195.523 L 142.386,195.613 L 102.867,195.613 L 102.867,195.411 L 142.386,195.411 L 142.498,195.523 L 142.498,195.523 L 142.498,195.613 L 142.386,195.613 L 142.498,195.523z"/> + <path style="fill: #4e503e; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 142.386 165.285 L 142.498,165.389 L 142.498,195.523 L 142.289,195.523 L 142.289,165.389 L 142.386,165.285 L 142.386,165.285 L 142.498,165.285 L 142.498,165.389 L 142.386,165.285z"/> + <path style="fill: #7b7c5c; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 102.867 195.523 L 96.1085,188.702 L 96.1085,158.576 L 102.867,165.389 L 102.867,195.523z"/> + <path style="fill: #4e503e; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 95.9973 188.702 L 96.178,188.632 L 102.936,195.439 L 102.797,195.599 L 96.032,188.778 L 95.9973,188.702 L 96.032,188.778 L 95.9973,188.744 L 95.9973,188.702z"/> + <path style="fill: #4e503e; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 96.178 158.499 L 96.2058,158.576 L 96.2058,188.702 L 95.9973,188.702 L 95.9973,158.576 L 96.178,158.499 L 95.9973,158.576 L 95.9973,158.325 L 96.178,158.499z"/> + <path style="fill: #4e503e; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 102.971 165.389 L 102.797,165.473 L 96.032,158.652 L 96.178,158.499 L 102.936,165.32 L 102.971,165.389 L 102.936,165.32 L 102.971,165.348 L 102.971,165.389z"/> + <path style="fill: #4e503e; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 102.797 195.599 L 102.762,195.523 L 102.762,165.389 L 102.971,165.389 L 102.971,195.523 L 102.797,195.599 L 102.971,195.523 L 102.971,195.773 L 102.797,195.599z"/> + <path style="fill: #7b7c5c; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 102.637 204.693 L 102.637,197.177 L 95.9138,190.44 L 95.9138,197.921 L 102.637,204.693z"/> + <path style="fill: #4e503e; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 102.714 197.094 L 102.741,197.177 L 102.741,204.693 L 102.533,204.693 L 102.533,197.177 L 102.714,197.094 L 102.714,197.094 L 102.741,197.129 L 102.741,197.177 L 102.714,197.094z"/> + <path style="fill: #4e503e; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 95.8026 190.44 L 95.9834,190.371 L 102.714,197.094 L 102.561,197.247 L 95.8374,190.517 L 95.8026,190.44 L 95.8026,190.44 L 95.8026,190.197 L 95.9834,190.371 L 95.8026,190.44z"/> + <path style="fill: #4e503e; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 95.8374 197.998 L 95.8026,197.921 L 95.8026,190.44 L 96.0112,190.44 L 96.0112,197.921 L 95.8374,197.998 L 95.8374,197.998 L 95.8026,197.963 L 95.8026,197.921 L 95.8374,197.998z"/> + <path style="fill: #4e503e; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 102.741 204.693 L 102.561,204.777 L 95.8374,197.998 L 95.9834,197.852 L 102.714,204.624 L 102.741,204.693 L 102.741,204.693 L 102.741,204.951 L 102.561,204.777 L 102.741,204.693z"/> + <path style="fill: #c8c9b6; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 96.1085 158.576 L 134.683,158.576 L 142.386,165.389 L 102.867,165.389 L 96.1085,158.576z"/> + <path style="fill: #4e503e; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 134.745 158.492 L 134.683,158.673 L 96.1085,158.673 L 96.1085,158.464 L 134.683,158.464 L 134.745,158.492 L 134.683,158.464 L 134.717,158.464 L 134.745,158.492z"/> + <path style="fill: #4e503e; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 142.386 165.494 L 142.324,165.473 L 134.613,158.659 L 134.745,158.492 L 142.463,165.313 L 142.386,165.494 L 142.463,165.313 L 142.657,165.494 L 142.386,165.494z"/> + <path style="fill: #4e503e; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 102.797 165.473 L 102.867,165.285 L 142.386,165.285 L 142.386,165.494 L 102.867,165.494 L 102.797,165.473 L 102.867,165.494 L 102.825,165.494 L 102.797,165.473z"/> + <path style="fill: #4e503e; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 96.1085 158.464 L 96.178,158.499 L 102.936,165.32 L 102.797,165.473 L 96.032,158.652 L 96.1085,158.464 L 96.032,158.652 L 95.8513,158.464 L 96.1085,158.464z"/> + <path style="fill: #c8c9b6; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 135.489 201.022 L 135.489,201.147 L 135.503,201.259 L 135.517,201.384 L 135.531,201.495 L 135.566,201.613 L 135.593,201.724 L 135.628,201.829 L 135.663,201.94 L 135.719,202.044 L 135.774,202.149 L 135.83,202.253 L 135.892,202.343 L 135.955,202.434 L 136.024,202.517 L 136.101,202.608 L 136.177,202.691 L 136.261,202.774 L 136.344,202.851 L 136.428,202.913 L 136.518,202.983 L 136.622,203.039 L 136.706,203.094 L 136.817,203.15 L 136.914,203.198 L 137.026,203.24 L 137.137,203.268 L 137.248,203.31 L 137.359,203.338 L 137.471,203.351 L 137.589,203.372 L 137.707,203.386 L 137.832,203.386 L 137.95,203.386 L 138.069,203.372 L 138.187,203.351 L 138.305,203.338 L 138.416,203.31 L 138.527,203.268 L 138.632,203.24 L 138.743,203.198 L 138.847,203.15 L 138.945,203.094 L 139.049,203.039 L 139.139,202.983 L 139.23,202.913 L 139.313,202.851 L 139.41,202.774 L 139.487,202.691 L 139.563,202.608 L 139.64,202.517 L 139.702,202.434 L 139.779,202.343 L 139.835,202.253 L 139.897,202.149 L 139.946,202.044 L 139.995,201.94 L 140.036,201.829 L 140.071,201.724 L 140.106,201.613 L 140.134,201.495 L 140.147,201.384 L 140.168,201.259 L 140.175,201.147 L 140.182,201.022 L 140.175,200.904 L 140.168,200.779 L 140.147,200.654 L 140.134,200.543 L 140.106,200.431 L 140.071,200.313 L 140.036,200.209 L 139.995,200.104 L 139.946,200 L 139.897,199.896 L 139.835,199.792 L 139.779,199.694 L 139.702,199.611 L 139.64,199.52 L 139.563,199.43 L 139.487,199.347 L 139.41,199.263 L 139.313,199.201 L 139.23,199.131 L 139.139,199.062 L 139.049,198.999 L 138.945,198.95 L 138.847,198.895 L 138.743,198.846 L 138.632,198.804 L 138.527,198.763 L 138.416,198.735 L 138.305,198.7 L 138.187,198.686 L 138.069,198.672 L 137.95,198.658 L 137.832,198.658 L 137.707,198.658 L 137.589,198.672 L 137.471,198.686 L 137.359,198.7 L 137.248,198.735 L 137.137,198.763 L 137.026,198.804 L 136.914,198.846 L 136.817,198.895 L 136.706,198.95 L 136.622,198.999 L 136.518,199.062 L 136.428,199.131 L 136.344,199.201 L 136.261,199.263 L 136.177,199.347 L 136.101,199.43 L 136.024,199.52 L 135.955,199.611 L 135.892,199.694 L 135.83,199.792 L 135.774,199.896 L 135.719,200 L 135.663,200.104 L 135.628,200.209 L 135.593,200.313 L 135.566,200.431 L 135.531,200.543 L 135.517,200.654 L 135.503,200.779 L 135.489,200.904 L 135.489,201.022z"/> + <path style="fill: #4e503e; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 137.832 203.484 L 137.832,203.484 L 137.77,203.484 L 137.707,203.477 L 137.644,203.477 L 137.575,203.477 L 137.519,203.47 L 137.464,203.463 L 137.394,203.442 L 137.345,203.435 L 137.269,203.428 L 137.22,203.414 L 137.158,203.393 L 137.095,203.379 L 136.991,203.344 L 136.88,203.296 L 136.768,203.247 L 136.664,203.192 L 136.56,203.129 L 136.462,203.066 L 136.358,202.997 L 136.275,202.934 L 136.184,202.851 L 136.101,202.767 L 136.024,202.677 L 135.941,202.594 L 135.865,202.503 L 135.802,202.399 L 135.739,202.302 L 135.677,202.204 L 135.621,202.086 L 135.579,201.982 L 135.531,201.871 L 135.489,201.745 L 135.461,201.641 L 135.433,201.523 L 135.427,201.453 L 135.42,201.398 L 135.406,201.335 L 135.399,201.28 L 135.392,201.21 L 135.385,201.154 L 135.385,201.085 L 135.385,201.022 L 135.593,201.022 L 135.593,201.078 L 135.6,201.134 L 135.6,201.203 L 135.607,201.252 L 135.614,201.307 L 135.621,201.37 L 135.628,201.426 L 135.635,201.474 L 135.663,201.585 L 135.698,201.697 L 135.732,201.801 L 135.774,201.898 L 135.816,201.996 L 135.865,202.093 L 135.913,202.197 L 135.976,202.288 L 136.038,202.378 L 136.101,202.461 L 136.177,202.545 L 136.254,202.614 L 136.323,202.691 L 136.4,202.767 L 136.49,202.823 L 136.574,202.893 L 136.671,202.955 L 136.761,203.004 L 136.866,203.059 L 136.956,203.094 L 137.053,203.136 L 137.165,203.178 L 137.22,203.192 L 137.269,203.212 L 137.325,203.219 L 137.38,203.233 L 137.436,203.24 L 137.491,203.254 L 137.547,203.261 L 137.603,203.268 L 137.665,203.268 L 137.714,203.268 L 137.777,203.268 L 137.832,203.268 L 137.832,203.268 L 137.832,203.484 L 137.832,203.484 L 137.832,203.484z"/> + <path style="fill: #4e503e; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 140.28 201.022 L 140.28,201.022 L 140.28,201.085 L 140.28,201.154 L 140.273,201.21 L 140.266,201.28 L 140.259,201.335 L 140.259,201.398 L 140.245,201.453 L 140.224,201.523 L 140.224,201.572 L 140.203,201.641 L 140.182,201.697 L 140.175,201.745 L 140.141,201.871 L 140.092,201.982 L 140.043,202.086 L 139.988,202.197 L 139.925,202.302 L 139.862,202.399 L 139.793,202.503 L 139.723,202.594 L 139.64,202.677 L 139.563,202.767 L 139.48,202.851 L 139.383,202.934 L 139.299,202.997 L 139.202,203.066 L 139.105,203.129 L 139,203.192 L 138.896,203.247 L 138.785,203.296 L 138.673,203.344 L 138.562,203.379 L 138.5,203.393 L 138.444,203.414 L 138.381,203.428 L 138.326,203.435 L 138.263,203.442 L 138.208,203.463 L 138.138,203.47 L 138.082,203.477 L 138.02,203.477 L 137.957,203.477 L 137.895,203.484 L 137.832,203.484 L 137.832,203.268 L 137.895,203.268 L 137.943,203.268 L 138.006,203.268 L 138.062,203.268 L 138.117,203.261 L 138.18,203.254 L 138.222,203.247 L 138.284,203.233 L 138.34,203.219 L 138.388,203.212 L 138.444,203.192 L 138.5,203.178 L 138.604,203.136 L 138.701,203.094 L 138.806,203.059 L 138.903,203.004 L 138.993,202.955 L 139.084,202.893 L 139.174,202.823 L 139.258,202.767 L 139.341,202.691 L 139.417,202.614 L 139.487,202.545 L 139.556,202.461 L 139.619,202.378 L 139.689,202.288 L 139.751,202.197 L 139.807,202.093 L 139.855,201.996 L 139.904,201.898 L 139.939,201.801 L 139.974,201.697 L 139.988,201.641 L 140.001,201.585 L 140.022,201.53 L 140.029,201.474 L 140.036,201.426 L 140.05,201.37 L 140.05,201.307 L 140.064,201.252 L 140.064,201.203 L 140.071,201.134 L 140.071,201.078 L 140.071,201.022 L 140.071,201.022 L 140.28,201.022 L 140.28,201.022 L 140.28,201.022z"/> + <path style="fill: #4e503e; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 137.832 198.554 L 137.832,198.554 L 137.895,198.554 L 137.957,198.554 L 138.02,198.561 L 138.082,198.568 L 138.138,198.568 L 138.208,198.575 L 138.263,198.589 L 138.326,198.603 L 138.444,198.631 L 138.562,198.658 L 138.673,198.7 L 138.785,198.742 L 138.896,198.79 L 139,198.853 L 139.105,198.916 L 139.202,198.964 L 139.299,199.041 L 139.383,199.124 L 139.48,199.194 L 139.563,199.27 L 139.64,199.368 L 139.723,199.444 L 139.793,199.548 L 139.862,199.639 L 139.925,199.736 L 139.988,199.847 L 140.043,199.952 L 140.092,200.063 L 140.141,200.174 L 140.175,200.292 L 140.182,200.348 L 140.203,200.397 L 140.224,200.466 L 140.224,200.522 L 140.245,200.584 L 140.259,200.654 L 140.259,200.702 L 140.266,200.772 L 140.273,200.828 L 140.28,200.897 L 140.28,200.953 L 140.28,201.022 L 140.071,201.022 L 140.071,200.96 L 140.071,200.904 L 140.064,200.848 L 140.064,200.779 L 140.05,200.737 L 140.05,200.682 L 140.036,200.612 L 140.029,200.563 L 140.022,200.515 L 140.001,200.459 L 139.988,200.397 L 139.974,200.348 L 139.939,200.244 L 139.904,200.139 L 139.855,200.042 L 139.807,199.945 L 139.751,199.854 L 139.689,199.764 L 139.619,199.673 L 139.556,199.59 L 139.487,199.507 L 139.417,199.423 L 139.341,199.347 L 139.258,199.284 L 139.174,199.215 L 139.084,199.152 L 138.993,199.089 L 138.903,199.041 L 138.806,198.985 L 138.701,198.943 L 138.604,198.902 L 138.5,198.867 L 138.388,198.825 L 138.284,198.811 L 138.222,198.79 L 138.18,198.783 L 138.117,198.783 L 138.062,198.777 L 138.006,198.77 L 137.943,198.77 L 137.895,198.763 L 137.832,198.763 L 137.832,198.763 L 137.832,198.554 L 137.832,198.554 L 137.832,198.554z"/> + <path style="fill: #4e503e; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 135.385 201.022 L 135.385,201.022 L 135.385,200.953 L 135.385,200.897 L 135.392,200.828 L 135.399,200.772 L 135.406,200.702 L 135.42,200.654 L 135.427,200.584 L 135.433,200.522 L 135.461,200.397 L 135.489,200.292 L 135.531,200.174 L 135.579,200.063 L 135.621,199.952 L 135.677,199.847 L 135.739,199.736 L 135.802,199.639 L 135.865,199.548 L 135.941,199.444 L 136.024,199.368 L 136.101,199.27 L 136.184,199.194 L 136.275,199.124 L 136.358,199.041 L 136.462,198.964 L 136.56,198.916 L 136.664,198.853 L 136.768,198.79 L 136.88,198.742 L 136.991,198.7 L 137.095,198.658 L 137.22,198.631 L 137.339,198.603 L 137.394,198.589 L 137.464,198.575 L 137.519,198.568 L 137.575,198.568 L 137.644,198.561 L 137.707,198.554 L 137.77,198.554 L 137.832,198.554 L 137.832,198.763 L 137.777,198.763 L 137.714,198.77 L 137.665,198.77 L 137.603,198.777 L 137.547,198.783 L 137.491,198.783 L 137.436,198.79 L 137.38,198.811 L 137.269,198.825 L 137.165,198.867 L 137.053,198.902 L 136.956,198.943 L 136.866,198.985 L 136.761,199.041 L 136.671,199.089 L 136.574,199.152 L 136.49,199.215 L 136.4,199.284 L 136.323,199.347 L 136.254,199.423 L 136.177,199.507 L 136.101,199.59 L 136.038,199.673 L 135.976,199.764 L 135.913,199.854 L 135.865,199.945 L 135.816,200.042 L 135.774,200.139 L 135.732,200.244 L 135.698,200.348 L 135.663,200.459 L 135.635,200.563 L 135.628,200.612 L 135.621,200.682 L 135.614,200.737 L 135.607,200.779 L 135.6,200.848 L 135.6,200.904 L 135.593,200.96 L 135.593,201.022 L 135.593,201.022 L 135.385,201.022 L 135.385,201.022 L 135.385,201.022z"/> + <path style="fill: #c8c9b6; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 104.459 201.022 L 104.459,201.147 L 104.473,201.259 L 104.487,201.384 L 104.514,201.495 L 104.535,201.613 L 104.563,201.724 L 104.591,201.829 L 104.647,201.94 L 104.695,202.044 L 104.744,202.149 L 104.799,202.253 L 104.862,202.343 L 104.925,202.434 L 104.994,202.517 L 105.071,202.608 L 105.147,202.691 L 105.231,202.774 L 105.314,202.851 L 105.397,202.913 L 105.495,202.983 L 105.592,203.039 L 105.676,203.094 L 105.794,203.15 L 105.891,203.198 L 105.995,203.24 L 106.107,203.268 L 106.225,203.31 L 106.329,203.338 L 106.447,203.351 L 106.566,203.372 L 106.677,203.386 L 106.809,203.386 L 106.927,203.386 L 107.045,203.372 L 107.156,203.351 L 107.282,203.338 L 107.393,203.31 L 107.504,203.268 L 107.615,203.24 L 107.72,203.198 L 107.824,203.15 L 107.928,203.094 L 108.026,203.039 L 108.109,202.983 L 108.213,202.913 L 108.304,202.851 L 108.387,202.774 L 108.471,202.691 L 108.547,202.608 L 108.617,202.517 L 108.686,202.434 L 108.756,202.343 L 108.804,202.253 L 108.874,202.149 L 108.922,202.044 L 108.971,201.94 L 109.013,201.829 L 109.048,201.724 L 109.069,201.613 L 109.11,201.495 L 109.124,201.384 L 109.145,201.259 L 109.152,201.147 L 109.152,201.022 L 109.152,200.904 L 109.145,200.779 L 109.124,200.654 L 109.11,200.543 L 109.069,200.431 L 109.048,200.313 L 109.013,200.209 L 108.971,200.104 L 108.922,200 L 108.874,199.896 L 108.804,199.792 L 108.756,199.694 L 108.686,199.611 L 108.617,199.52 L 108.547,199.43 L 108.471,199.347 L 108.387,199.263 L 108.304,199.201 L 108.213,199.131 L 108.109,199.062 L 108.026,198.999 L 107.928,198.95 L 107.824,198.895 L 107.72,198.846 L 107.615,198.804 L 107.504,198.763 L 107.393,198.735 L 107.282,198.7 L 107.156,198.686 L 107.045,198.672 L 106.927,198.658 L 106.809,198.658 L 106.677,198.658 L 106.566,198.672 L 106.447,198.686 L 106.329,198.7 L 106.225,198.735 L 106.107,198.763 L 105.995,198.804 L 105.891,198.846 L 105.794,198.895 L 105.676,198.95 L 105.592,198.999 L 105.495,199.062 L 105.397,199.131 L 105.314,199.201 L 105.231,199.263 L 105.147,199.347 L 105.071,199.43 L 104.994,199.52 L 104.925,199.611 L 104.862,199.694 L 104.799,199.792 L 104.744,199.896 L 104.695,200 L 104.647,200.104 L 104.591,200.209 L 104.563,200.313 L 104.535,200.431 L 104.514,200.543 L 104.487,200.654 L 104.473,200.779 L 104.459,200.904 L 104.459,201.022z"/> + <path style="fill: #4e503e; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 106.809 203.484 L 106.809,203.484 L 106.746,203.484 L 106.677,203.477 L 106.621,203.477 L 106.559,203.477 L 106.496,203.47 L 106.433,203.463 L 106.371,203.442 L 106.315,203.435 L 106.253,203.428 L 106.197,203.414 L 106.141,203.393 L 106.065,203.379 L 105.961,203.344 L 105.849,203.296 L 105.745,203.247 L 105.634,203.192 L 105.536,203.129 L 105.432,203.066 L 105.342,202.997 L 105.244,202.934 L 105.154,202.851 L 105.071,202.767 L 104.994,202.677 L 104.918,202.594 L 104.841,202.503 L 104.765,202.399 L 104.716,202.302 L 104.653,202.204 L 104.591,202.086 L 104.549,201.982 L 104.501,201.871 L 104.473,201.745 L 104.438,201.641 L 104.403,201.523 L 104.396,201.453 L 104.375,201.398 L 104.375,201.335 L 104.368,201.28 L 104.361,201.21 L 104.355,201.154 L 104.355,201.085 L 104.355,201.022 L 104.563,201.022 L 104.563,201.078 L 104.563,201.134 L 104.57,201.203 L 104.577,201.252 L 104.584,201.307 L 104.591,201.37 L 104.591,201.426 L 104.612,201.474 L 104.633,201.585 L 104.667,201.697 L 104.702,201.801 L 104.737,201.898 L 104.786,201.996 L 104.834,202.093 L 104.89,202.197 L 104.939,202.288 L 105.008,202.378 L 105.071,202.461 L 105.147,202.545 L 105.224,202.614 L 105.3,202.691 L 105.37,202.767 L 105.46,202.823 L 105.557,202.893 L 105.634,202.955 L 105.738,203.004 L 105.835,203.059 L 105.933,203.094 L 106.037,203.136 L 106.148,203.178 L 106.197,203.192 L 106.239,203.212 L 106.301,203.219 L 106.357,203.233 L 106.413,203.247 L 106.461,203.254 L 106.524,203.261 L 106.579,203.268 L 106.635,203.268 L 106.691,203.268 L 106.753,203.268 L 106.809,203.268 L 106.809,203.268 L 106.809,203.484 L 106.809,203.484 L 106.809,203.484z"/> + <path style="fill: #4e503e; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 109.256 201.022 L 109.256,201.022 L 109.256,201.085 L 109.256,201.154 L 109.242,201.21 L 109.242,201.28 L 109.235,201.335 L 109.228,201.398 L 109.221,201.453 L 109.208,201.523 L 109.194,201.572 L 109.18,201.641 L 109.166,201.697 L 109.152,201.759 L 109.11,201.871 L 109.069,201.982 L 109.02,202.086 L 108.964,202.204 L 108.895,202.302 L 108.839,202.399 L 108.763,202.503 L 108.7,202.594 L 108.624,202.677 L 108.54,202.767 L 108.457,202.851 L 108.366,202.934 L 108.276,202.997 L 108.179,203.066 L 108.067,203.129 L 107.977,203.192 L 107.873,203.247 L 107.761,203.296 L 107.65,203.344 L 107.539,203.379 L 107.476,203.393 L 107.414,203.414 L 107.358,203.428 L 107.302,203.435 L 107.24,203.442 L 107.184,203.463 L 107.108,203.47 L 107.059,203.477 L 106.997,203.477 L 106.934,203.477 L 106.871,203.484 L 106.809,203.484 L 106.809,203.268 L 106.871,203.268 L 106.92,203.268 L 106.983,203.268 L 107.038,203.268 L 107.094,203.261 L 107.15,203.254 L 107.198,203.24 L 107.261,203.233 L 107.316,203.219 L 107.365,203.212 L 107.414,203.192 L 107.476,203.178 L 107.581,203.136 L 107.678,203.094 L 107.782,203.059 L 107.873,203.004 L 107.97,202.955 L 108.06,202.893 L 108.151,202.823 L 108.234,202.767 L 108.311,202.691 L 108.394,202.614 L 108.471,202.545 L 108.54,202.461 L 108.603,202.378 L 108.665,202.288 L 108.721,202.197 L 108.783,202.093 L 108.832,201.996 L 108.874,201.898 L 108.916,201.801 L 108.95,201.697 L 108.964,201.641 L 108.978,201.585 L 108.992,201.53 L 109.006,201.474 L 109.02,201.426 L 109.02,201.37 L 109.034,201.307 L 109.034,201.252 L 109.041,201.203 L 109.048,201.134 L 109.048,201.078 L 109.048,201.022 L 109.048,201.022 L 109.256,201.022 L 109.256,201.022 L 109.256,201.022z"/> + <path style="fill: #4e503e; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 106.809 198.554 L 106.809,198.554 L 106.871,198.554 L 106.934,198.554 L 106.997,198.561 L 107.059,198.568 L 107.108,198.568 L 107.184,198.575 L 107.24,198.589 L 107.302,198.603 L 107.414,198.631 L 107.539,198.658 L 107.65,198.7 L 107.761,198.742 L 107.873,198.79 L 107.977,198.853 L 108.067,198.916 L 108.179,198.964 L 108.276,199.041 L 108.366,199.124 L 108.457,199.194 L 108.54,199.27 L 108.624,199.368 L 108.7,199.444 L 108.763,199.548 L 108.839,199.639 L 108.895,199.736 L 108.964,199.847 L 109.02,199.952 L 109.069,200.063 L 109.11,200.174 L 109.152,200.292 L 109.166,200.348 L 109.18,200.397 L 109.194,200.466 L 109.208,200.522 L 109.221,200.584 L 109.228,200.654 L 109.235,200.702 L 109.242,200.772 L 109.242,200.828 L 109.256,200.897 L 109.256,200.953 L 109.256,201.022 L 109.048,201.022 L 109.048,200.96 L 109.048,200.904 L 109.041,200.848 L 109.034,200.779 L 109.034,200.737 L 109.02,200.682 L 109.02,200.612 L 109.006,200.563 L 108.992,200.515 L 108.978,200.459 L 108.964,200.397 L 108.95,200.348 L 108.916,200.251 L 108.874,200.139 L 108.832,200.042 L 108.783,199.945 L 108.721,199.854 L 108.665,199.764 L 108.603,199.673 L 108.54,199.59 L 108.471,199.507 L 108.394,199.423 L 108.311,199.347 L 108.234,199.284 L 108.151,199.215 L 108.06,199.152 L 107.97,199.089 L 107.873,199.041 L 107.782,198.985 L 107.678,198.943 L 107.581,198.902 L 107.476,198.867 L 107.365,198.825 L 107.261,198.811 L 107.198,198.79 L 107.15,198.783 L 107.094,198.783 L 107.038,198.777 L 106.983,198.77 L 106.92,198.77 L 106.871,198.763 L 106.809,198.763 L 106.809,198.763 L 106.809,198.554 L 106.809,198.554 L 106.809,198.554z"/> + <path style="fill: #4e503e; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 104.355 201.022 L 104.355,201.022 L 104.355,200.953 L 104.355,200.897 L 104.361,200.828 L 104.368,200.772 L 104.375,200.702 L 104.375,200.654 L 104.396,200.584 L 104.403,200.522 L 104.438,200.397 L 104.473,200.292 L 104.501,200.174 L 104.549,200.063 L 104.591,199.952 L 104.653,199.847 L 104.716,199.736 L 104.765,199.639 L 104.841,199.548 L 104.918,199.444 L 104.994,199.368 L 105.071,199.27 L 105.154,199.194 L 105.244,199.124 L 105.342,199.041 L 105.432,198.964 L 105.536,198.916 L 105.634,198.853 L 105.745,198.79 L 105.849,198.742 L 105.961,198.7 L 106.065,198.658 L 106.197,198.631 L 106.315,198.603 L 106.371,198.589 L 106.433,198.575 L 106.496,198.568 L 106.559,198.568 L 106.621,198.561 L 106.677,198.554 L 106.746,198.554 L 106.809,198.554 L 106.809,198.763 L 106.753,198.763 L 106.691,198.77 L 106.635,198.77 L 106.579,198.777 L 106.524,198.783 L 106.461,198.783 L 106.413,198.79 L 106.357,198.811 L 106.239,198.825 L 106.148,198.867 L 106.037,198.902 L 105.933,198.943 L 105.835,198.985 L 105.738,199.041 L 105.634,199.089 L 105.557,199.152 L 105.46,199.215 L 105.37,199.284 L 105.3,199.347 L 105.224,199.423 L 105.147,199.507 L 105.071,199.59 L 105.008,199.673 L 104.939,199.764 L 104.89,199.854 L 104.834,199.945 L 104.786,200.042 L 104.737,200.139 L 104.702,200.251 L 104.667,200.348 L 104.633,200.459 L 104.612,200.563 L 104.591,200.612 L 104.591,200.682 L 104.584,200.737 L 104.577,200.779 L 104.57,200.848 L 104.563,200.904 L 104.563,200.96 L 104.563,201.022 L 104.563,201.022 L 104.355,201.022 L 104.355,201.022 L 104.355,201.022z"/> + <path style="fill: #c8c9b6; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 126.624 201.634 L 126.624,201.697 L 126.638,201.745 L 126.645,201.822 L 126.659,201.871 L 126.666,201.933 L 126.687,201.996 L 126.708,202.044 L 126.729,202.107 L 126.749,202.163 L 126.784,202.218 L 126.812,202.26 L 126.833,202.309 L 126.868,202.364 L 126.909,202.399 L 126.944,202.455 L 126.986,202.496 L 127.028,202.538 L 127.069,202.566 L 127.118,202.608 L 127.167,202.642 L 127.215,202.677 L 127.264,202.698 L 127.313,202.733 L 127.375,202.76 L 127.424,202.774 L 127.479,202.788 L 127.535,202.809 L 127.598,202.823 L 127.66,202.83 L 127.709,202.851 L 127.785,202.851 L 127.841,202.851 L 127.904,202.851 L 127.966,202.851 L 128.029,202.83 L 128.084,202.823 L 128.147,202.809 L 128.203,202.788 L 128.258,202.774 L 128.314,202.76 L 128.362,202.733 L 128.418,202.698 L 128.467,202.677 L 128.522,202.642 L 128.571,202.608 L 128.62,202.566 L 128.661,202.538 L 128.703,202.496 L 128.745,202.455 L 128.78,202.399 L 128.821,202.364 L 128.849,202.309 L 128.884,202.26 L 128.912,202.218 L 128.94,202.163 L 128.96,202.107 L 128.988,202.044 L 129.002,201.996 L 129.023,201.933 L 129.03,201.871 L 129.044,201.822 L 129.051,201.745 L 129.058,201.697 L 129.058,201.634 L 129.058,201.565 L 129.051,201.509 L 129.044,201.439 L 129.03,201.384 L 129.023,201.328 L 129.002,201.266 L 128.988,201.21 L 128.96,201.161 L 128.94,201.106 L 128.912,201.043 L 128.884,200.994 L 128.849,200.953 L 128.821,200.904 L 128.78,200.862 L 128.745,200.814 L 128.703,200.772 L 128.661,200.737 L 128.62,200.695 L 128.571,200.654 L 128.522,200.612 L 128.467,200.591 L 128.418,200.563 L 128.362,200.529 L 128.314,200.515 L 128.258,200.48 L 128.203,200.473 L 128.147,200.452 L 128.084,200.431 L 128.029,200.431 L 127.966,200.417 L 127.904,200.417 L 127.841,200.41 L 127.785,200.417 L 127.709,200.417 L 127.66,200.431 L 127.598,200.431 L 127.535,200.452 L 127.479,200.473 L 127.424,200.48 L 127.375,200.515 L 127.313,200.529 L 127.264,200.563 L 127.215,200.591 L 127.167,200.612 L 127.118,200.654 L 127.069,200.695 L 127.028,200.737 L 126.986,200.772 L 126.944,200.814 L 126.909,200.862 L 126.868,200.904 L 126.833,200.953 L 126.812,200.994 L 126.784,201.043 L 126.749,201.106 L 126.729,201.161 L 126.708,201.21 L 126.687,201.266 L 126.666,201.328 L 126.659,201.384 L 126.645,201.439 L 126.638,201.509 L 126.624,201.565 L 126.624,201.634z"/> + <path style="fill: #4e503e; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 127.841 202.955 L 127.841,202.955 L 127.778,202.955 L 127.709,202.948 L 127.646,202.941 L 127.577,202.934 L 127.514,202.913 L 127.452,202.893 L 127.389,202.872 L 127.333,202.851 L 127.271,202.823 L 127.215,202.788 L 127.16,202.767 L 127.104,202.733 L 127.055,202.691 L 127.007,202.649 L 126.958,202.608 L 126.909,202.566 L 126.868,202.517 L 126.826,202.475 L 126.784,202.427 L 126.749,202.371 L 126.708,202.322 L 126.687,202.26 L 126.659,202.211 L 126.624,202.149 L 126.61,202.086 L 126.59,202.03 L 126.569,201.954 L 126.555,201.898 L 126.548,201.829 L 126.534,201.766 L 126.534,201.697 L 126.527,201.634 L 126.736,201.634 L 126.742,201.69 L 126.742,201.745 L 126.749,201.801 L 126.756,201.857 L 126.77,201.912 L 126.784,201.954 L 126.798,202.017 L 126.826,202.065 L 126.84,202.114 L 126.868,202.163 L 126.895,202.211 L 126.923,202.26 L 126.951,202.302 L 126.986,202.343 L 127.028,202.385 L 127.055,202.42 L 127.097,202.461 L 127.139,202.496 L 127.181,202.517 L 127.229,202.552 L 127.264,202.587 L 127.313,202.608 L 127.361,202.635 L 127.403,202.656 L 127.466,202.677 L 127.507,202.691 L 127.563,202.712 L 127.625,202.726 L 127.667,202.733 L 127.73,202.74 L 127.785,202.74 L 127.841,202.74 L 127.841,202.74 L 127.841,202.955 L 127.841,202.955 L 127.841,202.955z"/> + <path style="fill: #4e503e; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 129.162 201.634 L 129.162,201.634 L 129.162,201.697 L 129.155,201.766 L 129.148,201.829 L 129.134,201.898 L 129.12,201.954 L 129.099,202.03 L 129.079,202.086 L 129.058,202.149 L 129.03,202.211 L 129.002,202.26 L 128.974,202.322 L 128.94,202.371 L 128.905,202.427 L 128.863,202.475 L 128.821,202.517 L 128.78,202.566 L 128.731,202.608 L 128.682,202.649 L 128.634,202.691 L 128.578,202.733 L 128.529,202.767 L 128.467,202.788 L 128.404,202.823 L 128.349,202.851 L 128.293,202.872 L 128.23,202.893 L 128.168,202.913 L 128.098,202.934 L 128.043,202.941 L 127.98,202.948 L 127.904,202.955 L 127.841,202.955 L 127.841,202.74 L 127.904,202.74 L 127.952,202.74 L 128.015,202.733 L 128.057,202.726 L 128.119,202.712 L 128.168,202.691 L 128.223,202.677 L 128.272,202.656 L 128.321,202.635 L 128.362,202.608 L 128.418,202.587 L 128.46,202.552 L 128.508,202.517 L 128.536,202.496 L 128.578,202.461 L 128.627,202.427 L 128.668,202.385 L 128.703,202.343 L 128.738,202.302 L 128.752,202.26 L 128.787,202.211 L 128.821,202.163 L 128.842,202.114 L 128.863,202.065 L 128.884,202.017 L 128.905,201.954 L 128.919,201.912 L 128.926,201.857 L 128.947,201.801 L 128.947,201.745 L 128.953,201.69 L 128.953,201.634 L 128.953,201.634 L 129.162,201.634 L 129.162,201.634 L 129.162,201.634z"/> + <path style="fill: #4e503e; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 127.841 200.306 L 127.841,200.306 L 127.904,200.306 L 127.98,200.306 L 128.043,200.313 L 128.098,200.334 L 128.168,200.348 L 128.23,200.369 L 128.293,200.39 L 128.349,200.41 L 128.404,200.431 L 128.467,200.473 L 128.529,200.501 L 128.578,200.529 L 128.634,200.563 L 128.682,200.605 L 128.731,200.654 L 128.78,200.695 L 128.821,200.737 L 128.863,200.779 L 128.905,200.835 L 128.94,200.897 L 128.974,200.946 L 129.002,201.001 L 129.03,201.05 L 129.058,201.113 L 129.079,201.175 L 129.099,201.238 L 129.12,201.3 L 129.134,201.37 L 129.148,201.432 L 129.155,201.495 L 129.162,201.565 L 129.162,201.634 L 128.953,201.634 L 128.953,201.572 L 128.947,201.516 L 128.947,201.46 L 128.926,201.412 L 128.919,201.349 L 128.905,201.3 L 128.884,201.245 L 128.863,201.203 L 128.842,201.154 L 128.821,201.106 L 128.787,201.05 L 128.752,201.001 L 128.738,200.96 L 128.703,200.918 L 128.668,200.876 L 128.627,200.848 L 128.578,200.807 L 128.536,200.772 L 128.508,200.737 L 128.46,200.702 L 128.418,200.682 L 128.362,200.654 L 128.321,200.626 L 128.272,200.605 L 128.223,200.584 L 128.168,200.563 L 128.119,200.556 L 128.057,200.529 L 128.015,200.522 L 127.952,200.522 L 127.904,200.522 L 127.841,200.522 L 127.841,200.522 L 127.841,200.306 L 127.841,200.306 L 127.841,200.306z"/> + <path style="fill: #4e503e; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 126.527 201.634 L 126.527,201.634 L 126.534,201.565 L 126.534,201.495 L 126.548,201.432 L 126.555,201.37 L 126.569,201.3 L 126.59,201.238 L 126.61,201.175 L 126.624,201.113 L 126.659,201.05 L 126.687,201.001 L 126.708,200.946 L 126.749,200.897 L 126.784,200.835 L 126.826,200.779 L 126.868,200.737 L 126.909,200.695 L 126.958,200.654 L 127.007,200.605 L 127.055,200.563 L 127.104,200.529 L 127.16,200.501 L 127.215,200.473 L 127.271,200.431 L 127.333,200.41 L 127.389,200.39 L 127.452,200.369 L 127.514,200.348 L 127.577,200.334 L 127.646,200.313 L 127.709,200.306 L 127.778,200.306 L 127.841,200.306 L 127.841,200.522 L 127.785,200.522 L 127.73,200.522 L 127.667,200.522 L 127.625,200.529 L 127.563,200.556 L 127.507,200.563 L 127.466,200.584 L 127.403,200.605 L 127.361,200.626 L 127.313,200.654 L 127.264,200.682 L 127.229,200.702 L 127.181,200.737 L 127.139,200.772 L 127.097,200.807 L 127.055,200.848 L 127.028,200.876 L 126.986,200.918 L 126.951,200.96 L 126.923,201.001 L 126.895,201.05 L 126.868,201.106 L 126.84,201.154 L 126.826,201.203 L 126.798,201.245 L 126.784,201.3 L 126.77,201.349 L 126.756,201.412 L 126.749,201.46 L 126.742,201.516 L 126.742,201.572 L 126.736,201.634 L 126.736,201.634 L 126.527,201.634 L 126.527,201.634 L 126.527,201.634z"/> + <path style="fill: #c8c9b6; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 121.785 201.634 L 121.785,201.697 L 121.792,201.745 L 121.799,201.822 L 121.813,201.871 L 121.827,201.933 L 121.841,201.996 L 121.869,202.044 L 121.882,202.107 L 121.91,202.163 L 121.931,202.218 L 121.959,202.26 L 121.994,202.309 L 122.028,202.364 L 122.07,202.399 L 122.105,202.455 L 122.147,202.496 L 122.188,202.538 L 122.23,202.566 L 122.272,202.608 L 122.321,202.642 L 122.362,202.677 L 122.425,202.698 L 122.473,202.733 L 122.529,202.76 L 122.585,202.774 L 122.64,202.788 L 122.703,202.809 L 122.752,202.823 L 122.814,202.83 L 122.877,202.851 L 122.946,202.851 L 123.002,202.851 L 123.071,202.851 L 123.134,202.851 L 123.19,202.83 L 123.252,202.823 L 123.308,202.809 L 123.363,202.788 L 123.426,202.774 L 123.475,202.76 L 123.53,202.733 L 123.579,202.698 L 123.628,202.677 L 123.669,202.642 L 123.732,202.608 L 123.774,202.566 L 123.822,202.538 L 123.864,202.496 L 123.899,202.455 L 123.941,202.399 L 123.975,202.364 L 124.01,202.309 L 124.038,202.26 L 124.059,202.218 L 124.093,202.163 L 124.114,202.107 L 124.142,202.044 L 124.156,201.996 L 124.177,201.933 L 124.191,201.871 L 124.191,201.822 L 124.205,201.745 L 124.212,201.697 L 124.212,201.634 L 124.212,201.565 L 124.205,201.509 L 124.191,201.439 L 124.191,201.384 L 124.177,201.328 L 124.156,201.266 L 124.142,201.21 L 124.114,201.161 L 124.093,201.106 L 124.059,201.043 L 124.038,200.994 L 124.01,200.953 L 123.975,200.904 L 123.941,200.862 L 123.899,200.814 L 123.864,200.772 L 123.822,200.737 L 123.774,200.695 L 123.732,200.654 L 123.669,200.612 L 123.628,200.591 L 123.579,200.563 L 123.53,200.529 L 123.475,200.515 L 123.426,200.48 L 123.363,200.473 L 123.308,200.452 L 123.252,200.431 L 123.19,200.431 L 123.134,200.417 L 123.071,200.417 L 123.002,200.41 L 122.946,200.417 L 122.877,200.417 L 122.814,200.431 L 122.752,200.431 L 122.703,200.452 L 122.64,200.473 L 122.585,200.48 L 122.529,200.515 L 122.473,200.529 L 122.425,200.563 L 122.362,200.591 L 122.321,200.612 L 122.272,200.654 L 122.23,200.695 L 122.188,200.737 L 122.147,200.772 L 122.105,200.814 L 122.07,200.862 L 122.028,200.904 L 121.994,200.953 L 121.959,200.994 L 121.931,201.043 L 121.91,201.106 L 121.882,201.161 L 121.869,201.21 L 121.841,201.266 L 121.827,201.328 L 121.813,201.384 L 121.799,201.439 L 121.792,201.509 L 121.785,201.565 L 121.785,201.634z"/> + <path style="fill: #4e503e; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 123.002 202.955 L 123.002,202.955 L 122.939,202.955 L 122.87,202.948 L 122.8,202.941 L 122.738,202.934 L 122.668,202.913 L 122.606,202.893 L 122.55,202.872 L 122.487,202.851 L 122.432,202.823 L 122.376,202.788 L 122.314,202.767 L 122.265,202.733 L 122.216,202.691 L 122.161,202.649 L 122.105,202.608 L 122.07,202.566 L 122.028,202.517 L 121.987,202.475 L 121.945,202.427 L 121.91,202.371 L 121.876,202.322 L 121.841,202.26 L 121.813,202.211 L 121.785,202.149 L 121.757,202.086 L 121.743,202.03 L 121.723,201.954 L 121.709,201.898 L 121.702,201.829 L 121.688,201.766 L 121.681,201.697 L 121.681,201.634 L 121.889,201.634 L 121.896,201.69 L 121.896,201.745 L 121.903,201.801 L 121.91,201.857 L 121.924,201.912 L 121.945,201.954 L 121.959,202.017 L 121.973,202.065 L 122.001,202.114 L 122.028,202.163 L 122.056,202.211 L 122.084,202.26 L 122.105,202.302 L 122.147,202.343 L 122.181,202.385 L 122.216,202.42 L 122.258,202.461 L 122.3,202.496 L 122.334,202.517 L 122.383,202.552 L 122.425,202.587 L 122.467,202.608 L 122.522,202.635 L 122.564,202.656 L 122.619,202.677 L 122.668,202.691 L 122.724,202.712 L 122.779,202.726 L 122.828,202.733 L 122.884,202.74 L 122.946,202.74 L 123.002,202.74 L 123.002,202.74 L 123.002,202.955 L 123.002,202.955 L 123.002,202.955z"/> + <path style="fill: #4e503e; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 124.316 201.634 L 124.316,201.634 L 124.316,201.697 L 124.309,201.766 L 124.302,201.829 L 124.288,201.898 L 124.274,201.954 L 124.26,202.03 L 124.233,202.086 L 124.219,202.149 L 124.191,202.211 L 124.156,202.26 L 124.128,202.322 L 124.093,202.371 L 124.059,202.427 L 124.017,202.475 L 123.982,202.517 L 123.927,202.566 L 123.885,202.608 L 123.836,202.649 L 123.788,202.691 L 123.739,202.733 L 123.683,202.767 L 123.628,202.788 L 123.579,202.823 L 123.516,202.851 L 123.461,202.872 L 123.391,202.893 L 123.336,202.913 L 123.266,202.934 L 123.204,202.941 L 123.141,202.948 L 123.071,202.955 L 123.002,202.955 L 123.002,202.74 L 123.058,202.74 L 123.12,202.74 L 123.176,202.733 L 123.231,202.726 L 123.28,202.712 L 123.336,202.691 L 123.391,202.677 L 123.433,202.656 L 123.482,202.635 L 123.53,202.608 L 123.579,202.587 L 123.621,202.552 L 123.669,202.517 L 123.711,202.496 L 123.746,202.461 L 123.788,202.427 L 123.829,202.385 L 123.857,202.343 L 123.885,202.302 L 123.92,202.26 L 123.947,202.211 L 123.975,202.163 L 124.003,202.114 L 124.017,202.065 L 124.045,202.017 L 124.059,201.954 L 124.073,201.912 L 124.087,201.857 L 124.093,201.801 L 124.1,201.745 L 124.1,201.69 L 124.1,201.634 L 124.1,201.634 L 124.316,201.634 L 124.316,201.634 L 124.316,201.634z"/> + <path style="fill: #4e503e; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 123.002 200.306 L 123.002,200.306 L 123.071,200.306 L 123.141,200.306 L 123.204,200.313 L 123.266,200.334 L 123.336,200.348 L 123.391,200.369 L 123.461,200.39 L 123.516,200.41 L 123.579,200.431 L 123.628,200.473 L 123.683,200.501 L 123.739,200.529 L 123.788,200.563 L 123.836,200.605 L 123.885,200.654 L 123.927,200.695 L 123.982,200.737 L 124.017,200.779 L 124.059,200.835 L 124.093,200.897 L 124.128,200.946 L 124.156,201.001 L 124.191,201.05 L 124.219,201.113 L 124.233,201.175 L 124.26,201.238 L 124.274,201.3 L 124.288,201.37 L 124.302,201.432 L 124.309,201.495 L 124.316,201.565 L 124.316,201.634 L 124.1,201.634 L 124.1,201.572 L 124.1,201.516 L 124.093,201.46 L 124.087,201.412 L 124.073,201.349 L 124.059,201.3 L 124.045,201.245 L 124.017,201.203 L 124.003,201.154 L 123.975,201.106 L 123.947,201.05 L 123.92,201.001 L 123.885,200.96 L 123.857,200.918 L 123.829,200.876 L 123.788,200.848 L 123.746,200.807 L 123.711,200.772 L 123.669,200.737 L 123.621,200.702 L 123.579,200.682 L 123.53,200.654 L 123.482,200.626 L 123.433,200.605 L 123.391,200.584 L 123.336,200.563 L 123.28,200.556 L 123.231,200.529 L 123.176,200.522 L 123.12,200.522 L 123.058,200.522 L 123.002,200.522 L 123.002,200.522 L 123.002,200.306 L 123.002,200.306 L 123.002,200.306z"/> + <path style="fill: #4e503e; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 121.681 201.634 L 121.681,201.634 L 121.681,201.565 L 121.688,201.495 L 121.702,201.432 L 121.709,201.37 L 121.723,201.3 L 121.743,201.238 L 121.757,201.175 L 121.785,201.113 L 121.813,201.05 L 121.841,201.001 L 121.876,200.946 L 121.91,200.897 L 121.945,200.835 L 121.987,200.779 L 122.028,200.737 L 122.07,200.695 L 122.105,200.654 L 122.161,200.605 L 122.216,200.563 L 122.265,200.529 L 122.314,200.501 L 122.376,200.473 L 122.432,200.431 L 122.487,200.41 L 122.55,200.39 L 122.606,200.369 L 122.668,200.348 L 122.738,200.334 L 122.8,200.313 L 122.87,200.306 L 122.939,200.306 L 123.002,200.306 L 123.002,200.522 L 122.946,200.522 L 122.884,200.522 L 122.828,200.522 L 122.779,200.529 L 122.724,200.556 L 122.668,200.563 L 122.619,200.584 L 122.564,200.605 L 122.522,200.626 L 122.467,200.654 L 122.425,200.682 L 122.383,200.702 L 122.334,200.737 L 122.3,200.772 L 122.258,200.807 L 122.216,200.848 L 122.181,200.876 L 122.147,200.918 L 122.105,200.96 L 122.084,201.001 L 122.056,201.05 L 122.028,201.106 L 122.001,201.154 L 121.973,201.203 L 121.959,201.245 L 121.945,201.3 L 121.924,201.349 L 121.91,201.412 L 121.903,201.46 L 121.896,201.516 L 121.896,201.572 L 121.889,201.634 L 121.889,201.634 L 121.681,201.634 L 121.681,201.634 L 121.681,201.634z"/> + <path style="fill: #c8c9b6; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 116.946 201.634 L 116.953,201.697 L 116.953,201.745 L 116.953,201.822 L 116.967,201.871 L 116.974,201.933 L 116.995,201.996 L 117.016,202.044 L 117.036,202.107 L 117.064,202.163 L 117.092,202.218 L 117.12,202.26 L 117.148,202.309 L 117.189,202.364 L 117.224,202.399 L 117.259,202.455 L 117.301,202.496 L 117.349,202.538 L 117.391,202.566 L 117.433,202.608 L 117.481,202.642 L 117.537,202.677 L 117.586,202.698 L 117.627,202.733 L 117.69,202.76 L 117.753,202.774 L 117.801,202.788 L 117.864,202.809 L 117.919,202.823 L 117.975,202.83 L 118.038,202.851 L 118.1,202.851 L 118.163,202.851 L 118.225,202.851 L 118.281,202.851 L 118.35,202.83 L 118.406,202.823 L 118.455,202.809 L 118.517,202.788 L 118.58,202.774 L 118.629,202.76 L 118.684,202.733 L 118.74,202.698 L 118.789,202.677 L 118.837,202.642 L 118.886,202.608 L 118.928,202.566 L 118.976,202.538 L 119.018,202.496 L 119.06,202.455 L 119.094,202.399 L 119.129,202.364 L 119.164,202.309 L 119.192,202.26 L 119.227,202.218 L 119.254,202.163 L 119.275,202.107 L 119.303,202.044 L 119.317,201.996 L 119.324,201.933 L 119.345,201.871 L 119.352,201.822 L 119.366,201.745 L 119.366,201.697 L 119.366,201.634 L 119.366,201.565 L 119.366,201.509 L 119.352,201.439 L 119.345,201.384 L 119.324,201.328 L 119.317,201.266 L 119.303,201.21 L 119.275,201.161 L 119.254,201.106 L 119.227,201.043 L 119.192,200.994 L 119.164,200.953 L 119.129,200.904 L 119.094,200.862 L 119.06,200.814 L 119.018,200.772 L 118.976,200.737 L 118.928,200.695 L 118.886,200.654 L 118.837,200.612 L 118.789,200.591 L 118.74,200.563 L 118.684,200.529 L 118.629,200.515 L 118.58,200.48 L 118.517,200.473 L 118.455,200.452 L 118.406,200.431 L 118.35,200.431 L 118.281,200.417 L 118.225,200.417 L 118.163,200.41 L 118.1,200.417 L 118.038,200.417 L 117.975,200.431 L 117.919,200.431 L 117.864,200.452 L 117.801,200.473 L 117.753,200.48 L 117.69,200.515 L 117.627,200.529 L 117.586,200.563 L 117.537,200.591 L 117.481,200.612 L 117.433,200.654 L 117.391,200.695 L 117.349,200.737 L 117.301,200.772 L 117.259,200.814 L 117.224,200.862 L 117.189,200.904 L 117.148,200.953 L 117.12,200.994 L 117.092,201.043 L 117.064,201.106 L 117.036,201.161 L 117.016,201.21 L 116.995,201.266 L 116.974,201.328 L 116.967,201.384 L 116.953,201.439 L 116.953,201.509 L 116.953,201.565 L 116.946,201.634z"/> + <path style="fill: #4e503e; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 118.163 202.955 L 118.163,202.955 L 118.093,202.955 L 118.031,202.948 L 117.961,202.941 L 117.899,202.934 L 117.829,202.913 L 117.773,202.893 L 117.711,202.872 L 117.648,202.851 L 117.586,202.823 L 117.537,202.788 L 117.481,202.767 L 117.426,202.733 L 117.377,202.691 L 117.321,202.649 L 117.273,202.608 L 117.231,202.566 L 117.182,202.517 L 117.148,202.475 L 117.106,202.427 L 117.064,202.371 L 117.029,202.322 L 116.995,202.26 L 116.967,202.211 L 116.946,202.149 L 116.918,202.086 L 116.904,202.03 L 116.883,201.954 L 116.87,201.898 L 116.856,201.829 L 116.849,201.766 L 116.842,201.697 L 116.835,201.634 L 117.05,201.634 L 117.05,201.69 L 117.057,201.745 L 117.064,201.801 L 117.064,201.857 L 117.085,201.912 L 117.099,201.954 L 117.106,202.017 L 117.141,202.065 L 117.148,202.114 L 117.182,202.163 L 117.21,202.211 L 117.238,202.26 L 117.273,202.302 L 117.308,202.343 L 117.349,202.385 L 117.384,202.42 L 117.412,202.461 L 117.454,202.496 L 117.495,202.517 L 117.544,202.552 L 117.586,202.587 L 117.627,202.608 L 117.683,202.635 L 117.732,202.656 L 117.787,202.677 L 117.829,202.691 L 117.885,202.712 L 117.933,202.726 L 117.989,202.733 L 118.045,202.74 L 118.107,202.74 L 118.163,202.74 L 118.163,202.74 L 118.163,202.955 L 118.163,202.955 L 118.163,202.955z"/> + <path style="fill: #4e503e; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 119.477 201.634 L 119.477,201.634 L 119.47,201.697 L 119.47,201.766 L 119.463,201.829 L 119.449,201.898 L 119.428,201.954 L 119.407,202.03 L 119.393,202.086 L 119.366,202.149 L 119.345,202.211 L 119.317,202.26 L 119.282,202.322 L 119.254,202.371 L 119.213,202.427 L 119.178,202.475 L 119.136,202.517 L 119.094,202.566 L 119.046,202.608 L 118.997,202.649 L 118.948,202.691 L 118.886,202.733 L 118.844,202.767 L 118.789,202.788 L 118.733,202.823 L 118.67,202.851 L 118.615,202.872 L 118.552,202.893 L 118.49,202.913 L 118.427,202.934 L 118.357,202.941 L 118.295,202.948 L 118.232,202.955 L 118.163,202.955 L 118.163,202.74 L 118.225,202.74 L 118.274,202.74 L 118.323,202.733 L 118.385,202.726 L 118.441,202.712 L 118.49,202.691 L 118.538,202.677 L 118.587,202.656 L 118.642,202.635 L 118.684,202.608 L 118.733,202.587 L 118.782,202.552 L 118.823,202.517 L 118.865,202.496 L 118.907,202.461 L 118.941,202.427 L 118.976,202.385 L 119.018,202.343 L 119.046,202.302 L 119.081,202.26 L 119.108,202.211 L 119.129,202.163 L 119.15,202.114 L 119.185,202.065 L 119.192,202.017 L 119.22,201.954 L 119.227,201.912 L 119.247,201.857 L 119.254,201.801 L 119.261,201.745 L 119.268,201.69 L 119.268,201.634 L 119.268,201.634 L 119.477,201.634 L 119.477,201.634 L 119.477,201.634z"/> + <path style="fill: #4e503e; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 118.163 200.306 L 118.163,200.306 L 118.232,200.306 L 118.295,200.306 L 118.357,200.313 L 118.427,200.334 L 118.49,200.348 L 118.552,200.369 L 118.615,200.39 L 118.67,200.41 L 118.733,200.431 L 118.789,200.473 L 118.844,200.501 L 118.886,200.529 L 118.948,200.563 L 118.997,200.605 L 119.046,200.654 L 119.094,200.695 L 119.136,200.737 L 119.178,200.779 L 119.213,200.835 L 119.254,200.897 L 119.282,200.946 L 119.317,201.001 L 119.345,201.05 L 119.366,201.113 L 119.393,201.175 L 119.407,201.238 L 119.428,201.3 L 119.449,201.37 L 119.463,201.432 L 119.47,201.495 L 119.47,201.565 L 119.477,201.634 L 119.268,201.634 L 119.268,201.572 L 119.261,201.516 L 119.254,201.46 L 119.247,201.412 L 119.227,201.349 L 119.22,201.3 L 119.192,201.245 L 119.185,201.203 L 119.15,201.154 L 119.129,201.106 L 119.108,201.05 L 119.081,201.001 L 119.046,200.96 L 119.018,200.918 L 118.976,200.876 L 118.941,200.848 L 118.907,200.807 L 118.865,200.772 L 118.823,200.737 L 118.782,200.702 L 118.733,200.682 L 118.684,200.654 L 118.642,200.626 L 118.587,200.605 L 118.538,200.584 L 118.49,200.563 L 118.441,200.556 L 118.385,200.529 L 118.323,200.522 L 118.274,200.522 L 118.225,200.522 L 118.163,200.522 L 118.163,200.522 L 118.163,200.306 L 118.163,200.306 L 118.163,200.306z"/> + <path style="fill: #4e503e; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 116.835 201.634 L 116.835,201.634 L 116.842,201.565 L 116.849,201.495 L 116.856,201.432 L 116.87,201.37 L 116.883,201.3 L 116.904,201.238 L 116.918,201.175 L 116.946,201.113 L 116.967,201.05 L 116.995,201.001 L 117.029,200.946 L 117.064,200.897 L 117.106,200.835 L 117.148,200.779 L 117.182,200.737 L 117.231,200.695 L 117.273,200.654 L 117.321,200.605 L 117.377,200.563 L 117.433,200.529 L 117.481,200.501 L 117.537,200.473 L 117.586,200.431 L 117.648,200.41 L 117.711,200.39 L 117.773,200.369 L 117.829,200.348 L 117.899,200.334 L 117.961,200.313 L 118.031,200.306 L 118.093,200.306 L 118.163,200.306 L 118.163,200.522 L 118.107,200.522 L 118.045,200.522 L 117.989,200.522 L 117.933,200.529 L 117.885,200.556 L 117.829,200.563 L 117.787,200.584 L 117.732,200.605 L 117.683,200.626 L 117.627,200.654 L 117.586,200.682 L 117.544,200.702 L 117.495,200.737 L 117.454,200.772 L 117.412,200.807 L 117.384,200.848 L 117.349,200.876 L 117.308,200.918 L 117.273,200.96 L 117.238,201.001 L 117.21,201.05 L 117.182,201.106 L 117.148,201.154 L 117.141,201.203 L 117.106,201.245 L 117.099,201.3 L 117.085,201.349 L 117.064,201.412 L 117.064,201.46 L 117.057,201.516 L 117.05,201.572 L 117.05,201.634 L 117.05,201.634 L 116.835,201.634 L 116.835,201.634 L 116.835,201.634z"/> + <path style="fill: #f4f6dd; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 135.628 168.539 L 109.131,168.539 L 108.971,168.546 L 108.804,168.56 L 108.651,168.581 L 108.498,168.608 L 108.352,168.643 L 108.199,168.678 L 108.06,168.74 L 107.914,168.796 L 107.775,168.852 L 107.643,168.928 L 107.504,169.005 L 107.386,169.088 L 107.268,169.179 L 107.143,169.269 L 107.024,169.359 L 106.92,169.471 L 106.823,169.575 L 106.718,169.693 L 106.635,169.804 L 106.545,169.929 L 106.461,170.062 L 106.392,170.187 L 106.315,170.326 L 106.253,170.472 L 106.197,170.611 L 106.155,170.75 L 106.1,170.91 L 106.065,171.056 L 106.037,171.223 L 106.016,171.369 L 106.009,171.535 L 106.002,171.688 L 106.002,188.563 L 106.009,188.73 L 106.016,188.883 L 106.037,189.043 L 106.065,189.189 L 106.1,189.355 L 106.155,189.501 L 106.197,189.648 L 106.253,189.787 L 106.315,189.926 L 106.392,190.058 L 106.461,190.204 L 106.545,190.329 L 106.635,190.447 L 106.718,190.565 L 106.823,190.683 L 106.92,190.788 L 107.024,190.892 L 107.143,190.996 L 107.268,191.094 L 107.386,191.177 L 107.504,191.261 L 107.643,191.337 L 107.775,191.393 L 107.914,191.469 L 108.06,191.518 L 108.199,191.566 L 108.352,191.608 L 108.498,191.643 L 108.651,191.678 L 108.804,191.692 L 108.971,191.699 L 109.131,191.706 L 135.628,191.706 L 135.795,191.699 L 135.948,191.692 L 136.108,191.678 L 136.261,191.643 L 136.414,191.608 L 136.56,191.566 L 136.706,191.518 L 136.852,191.469 L 136.984,191.393 L 137.123,191.337 L 137.255,191.261 L 137.38,191.177 L 137.505,191.094 L 137.617,190.996 L 137.735,190.892 L 137.839,190.788 L 137.943,190.683 L 138.041,190.565 L 138.138,190.447 L 138.222,190.329 L 138.305,190.204 L 138.381,190.058 L 138.444,189.926 L 138.507,189.787 L 138.569,189.648 L 138.618,189.501 L 138.66,189.355 L 138.694,189.189 L 138.715,189.043 L 138.743,188.883 L 138.75,188.73 L 138.75,188.563 L 138.75,171.688 L 138.75,171.535 L 138.743,171.369 L 138.715,171.223 L 138.694,171.056 L 138.66,170.91 L 138.618,170.75 L 138.569,170.611 L 138.507,170.472 L 138.444,170.326 L 138.381,170.187 L 138.305,170.062 L 138.222,169.929 L 138.138,169.804 L 138.041,169.693 L 137.943,169.575 L 137.839,169.471 L 137.735,169.359 L 137.617,169.269 L 137.505,169.179 L 137.38,169.088 L 137.255,169.005 L 137.123,168.928 L 136.984,168.852 L 136.852,168.796 L 136.706,168.74 L 136.56,168.678 L 136.414,168.643 L 136.261,168.608 L 136.108,168.581 L 135.948,168.56 L 135.795,168.546 L 135.628,168.539z"/> + <path style="fill: #f4ddd2; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 130.421 172.759 L 126.882,169.617 L 124.26,170.833 L 124.566,173.67 L 123.655,175.707 L 124.671,178.447 L 124.74,179.079 L 124.754,179.142 L 124.789,179.191 L 124.81,179.253 L 124.837,179.295 L 124.865,179.343 L 124.9,179.378 L 124.928,179.406 L 124.963,179.441 L 124.997,179.469 L 125.039,179.489 L 125.074,179.51 L 125.102,179.517 L 125.143,179.524 L 125.185,179.531 L 125.227,179.538 L 125.268,179.538 L 125.31,179.552 L 125.345,179.552 L 125.38,179.538 L 125.408,179.538 L 125.477,179.531 L 125.533,179.517 L 125.616,179.489 L 125.644,179.483 L 126.882,184.356 L 130.219,179.969 L 130.622,178.05 L 132.027,173.976 L 130.421,172.759z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 126.833 169.519 L 126.951,169.533 L 130.483,172.69 L 130.344,172.836 L 126.812,169.693 L 126.833,169.519 L 126.833,169.519 L 126.902,169.491 L 126.951,169.533 L 126.833,169.519z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 124.156 170.84 L 124.219,170.743 L 126.833,169.519 L 126.923,169.707 L 124.309,170.924 L 124.156,170.84 L 124.156,170.84 L 124.149,170.764 L 124.219,170.743 L 124.156,170.84z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 124.664 173.712 L 124.462,173.691 L 124.156,170.84 L 124.365,170.819 L 124.671,173.663 L 124.664,173.712 L 124.671,173.663 L 124.671,173.698 L 124.664,173.712z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 123.558 175.749 L 123.565,175.665 L 124.469,173.628 L 124.664,173.712 L 123.753,175.749 L 123.558,175.749 L 123.558,175.749 L 123.551,175.707 L 123.565,175.665 L 123.558,175.749z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 124.768 178.447 L 124.566,178.488 L 123.558,175.749 L 123.753,175.672 L 124.754,178.412 L 124.768,178.447 L 124.754,178.412 L 124.768,178.433 L 124.768,178.447z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 124.636 179.086 L 124.559,178.467 L 124.768,178.447 L 124.844,179.058 L 124.636,179.086z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 125.686 179.573 L 125.644,179.594 L 125.554,179.615 L 125.491,179.629 L 125.428,179.642 L 125.387,179.649 L 125.345,179.649 L 125.31,179.656 L 125.262,179.649 L 125.22,179.649 L 125.171,179.629 L 125.129,179.629 L 125.081,179.615 L 125.032,179.601 L 124.99,179.573 L 124.949,179.552 L 124.907,179.524 L 124.865,179.489 L 124.824,179.448 L 124.789,179.399 L 124.747,179.35 L 124.712,179.295 L 124.684,179.246 L 124.664,179.177 L 124.643,179.1 L 124.837,179.045 L 124.865,179.1 L 124.879,179.149 L 124.9,179.204 L 124.921,179.246 L 124.949,179.274 L 124.97,179.302 L 124.997,179.337 L 125.025,179.357 L 125.06,179.378 L 125.088,179.392 L 125.116,179.399 L 125.143,179.42 L 125.178,179.427 L 125.213,179.434 L 125.234,179.441 L 125.275,179.441 L 125.31,179.441 L 125.338,179.441 L 125.366,179.441 L 125.394,179.434 L 125.449,179.427 L 125.505,179.42 L 125.581,179.392 L 125.602,179.385 L 125.686,179.573z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 126.965 184.405 L 126.784,184.377 L 125.547,179.51 L 125.748,179.455 L 126.986,184.322 L 126.965,184.405 L 126.965,184.405 L 126.826,184.579 L 126.784,184.377 L 126.965,184.405z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 130.316 180.004 L 130.295,180.046 L 126.965,184.405 L 126.798,184.287 L 130.128,179.921 L 130.316,180.004 L 130.316,180.004 L 130.309,180.018 L 130.295,180.046 L 130.316,180.004z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 130.518 178.009 L 130.719,178.064 L 130.316,180.004 L 130.101,179.962 L 130.511,178.029 L 130.518,178.009 L 130.511,178.029 L 130.511,178.015 L 130.518,178.009z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 132.131 174.011 L 130.713,178.085 L 130.518,178.009 L 131.936,173.948 L 132.131,174.011z"/> + <path style="fill: #925f2c; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 128.87 171.967 L 128.842,172.008 L 128.814,172.05 L 128.787,172.092 L 128.766,172.133 L 128.745,172.175 L 128.724,172.224 L 128.703,172.266 L 128.696,172.314 L 128.668,172.398 L 128.641,172.488 L 128.627,172.565 L 128.62,172.627 L 128.613,172.711 L 128.606,172.794 L 128.599,172.884 L 128.599,172.968 L 128.606,173.044 L 128.606,173.128 L 128.613,173.211 L 128.62,173.295 L 128.627,173.371 L 128.641,173.454 L 128.655,173.538 L 128.668,173.621 L 128.703,173.788 L 128.738,173.948 L 128.78,174.108 L 128.828,174.268 L 128.87,174.435 L 128.926,174.588 L 128.981,174.748 L 129.037,174.908 L 129.099,175.061 L 129.155,175.22 L 129.169,175.262 L 129.183,175.311 L 129.19,175.36 L 129.204,175.422 L 129.225,175.533 L 129.252,175.658 L 129.266,175.707 L 129.287,175.749 L 129.294,175.777 L 129.308,175.791 L 129.315,175.805 L 129.329,175.825 L 129.343,175.832 L 129.357,175.839 L 129.378,175.839 L 129.392,175.846 L 129.405,175.839 L 129.426,175.839 L 129.447,175.832 L 129.468,175.825 L 129.524,175.784 L 129.579,175.742 L 129.621,175.693 L 129.677,175.645 L 129.788,175.533 L 129.878,175.422 L 129.927,175.36 L 129.982,175.318 L 130.031,175.269 L 130.087,175.227 L 130.142,175.186 L 130.191,175.144 L 130.226,175.13 L 130.247,175.109 L 130.275,175.095 L 130.302,175.095 L 130.344,175.081 L 130.379,175.061 L 130.414,175.061 L 130.448,175.061 L 130.483,175.061 L 130.518,175.061 L 130.553,175.061 L 130.587,175.074 L 130.622,175.088 L 130.664,175.095 L 130.706,175.102 L 130.74,175.123 L 130.81,175.151 L 130.886,175.193 L 130.956,175.234 L 131.032,175.276 L 131.102,175.325 L 131.178,175.38 L 131.317,175.478 L 131.463,175.568 L 131.338,175.749 L 131.199,175.923 L 131.067,176.103 L 130.935,176.291 L 130.872,176.382 L 130.81,176.472 L 130.747,176.562 L 130.692,176.66 L 130.622,176.75 L 130.573,176.84 L 130.518,176.931 L 130.469,177.042 L 130.427,177.139 L 130.386,177.23 L 130.344,177.334 L 130.302,177.438 L 130.275,177.529 L 130.254,177.64 L 130.226,177.737 L 130.212,177.835 L 130.198,177.946 L 130.191,178.05 L 130.191,178.162 L 130.198,178.273 L 130.212,178.384 L 130.226,178.488 L 130.254,178.613 L 130.275,178.725 L 130.448,178.474 L 130.615,178.224 L 130.782,177.974 L 130.949,177.73 L 131.116,177.48 L 131.283,177.23 L 131.45,176.973 L 131.609,176.729 L 131.769,176.472 L 131.922,176.222 L 132.075,175.964 L 132.221,175.7 L 132.374,175.443 L 132.506,175.186 L 132.576,175.054 L 132.638,174.915 L 132.701,174.782 L 132.771,174.643 L 132.805,174.574 L 132.833,174.49 L 132.861,174.414 L 132.882,174.344 L 132.903,174.261 L 132.917,174.178 L 132.937,174.094 L 132.944,174.011 L 132.958,173.927 L 132.965,173.837 L 132.972,173.753 L 132.972,173.663 L 132.972,173.573 L 132.972,173.489 L 132.965,173.399 L 132.951,173.308 L 132.944,173.225 L 132.924,173.142 L 132.917,173.051 L 132.903,172.968 L 132.875,172.884 L 132.861,172.794 L 132.833,172.717 L 132.805,172.641 L 132.778,172.565 L 132.743,172.488 L 132.708,172.405 L 132.673,172.342 L 132.638,172.272 L 132.604,172.196 L 132.562,172.14 L 132.52,172.078 L 132.451,171.974 L 132.381,171.89 L 132.305,171.793 L 132.228,171.709 L 132.152,171.619 L 132.068,171.535 L 131.992,171.445 L 131.908,171.362 L 131.825,171.271 L 131.742,171.188 L 131.651,171.111 L 131.561,171.042 L 131.47,170.965 L 131.38,170.882 L 131.283,170.805 L 131.185,170.743 L 131.088,170.666 L 130.991,170.604 L 130.893,170.541 L 130.789,170.479 L 130.692,170.409 L 130.587,170.36 L 130.476,170.305 L 130.372,170.242 L 130.268,170.194 L 130.156,170.145 L 130.052,170.103 L 129.941,170.062 L 129.83,170.02 L 129.711,169.992 L 129.607,169.95 L 129.489,169.922 L 129.183,169.839 L 128.877,169.763 L 128.578,169.7 L 128.265,169.623 L 127.952,169.561 L 127.653,169.491 L 127.347,169.443 L 127.041,169.387 L 126.729,169.325 L 126.423,169.283 L 126.103,169.241 L 125.797,169.213 L 125.644,169.192 L 125.491,169.185 L 125.338,169.179 L 125.178,169.165 L 125.025,169.151 L 124.865,169.144 L 124.705,169.144 L 124.538,169.144 L 124.837,169.283 L 125.116,169.436 L 125.394,169.575 L 125.665,169.707 L 125.95,169.867 L 126.228,170.006 L 126.506,170.152 L 126.784,170.312 L 127.048,170.458 L 127.32,170.618 L 127.598,170.785 L 127.869,170.958 L 128.14,171.125 L 128.418,171.306 L 128.696,171.487 L 128.967,171.668 L 128.981,171.688 L 128.988,171.702 L 128.988,171.709 L 128.988,171.73 L 128.988,171.751 L 128.988,171.772 L 128.988,171.786 L 128.981,171.807 L 128.953,171.848 L 128.926,171.89 L 128.905,171.925 L 128.87,171.967z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 128.515 172.62 L 128.515,172.62 L 128.529,172.537 L 128.536,172.453 L 128.564,172.356 L 128.592,172.272 L 128.613,172.231 L 128.627,172.182 L 128.655,172.133 L 128.668,172.085 L 128.703,172.036 L 128.731,171.994 L 128.752,171.946 L 128.787,171.904 L 128.953,172.036 L 128.926,172.064 L 128.905,172.106 L 128.877,172.14 L 128.863,172.182 L 128.835,172.224 L 128.821,172.266 L 128.807,172.307 L 128.787,172.342 L 128.766,172.425 L 128.745,172.495 L 128.731,172.578 L 128.724,172.648 L 128.724,172.648 L 128.515,172.62 L 128.515,172.62 L 128.515,172.62z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 129.058 175.255 L 129.058,175.255 L 128.995,175.095 L 128.947,174.935 L 128.884,174.789 L 128.828,174.623 L 128.773,174.47 L 128.724,174.31 L 128.675,174.136 L 128.634,173.969 L 128.592,173.795 L 128.564,173.642 L 128.536,173.545 L 128.536,173.468 L 128.529,173.385 L 128.515,173.302 L 128.508,173.218 L 128.502,173.135 L 128.495,173.051 L 128.495,172.968 L 128.495,172.877 L 128.502,172.794 L 128.502,172.711 L 128.515,172.62 L 128.724,172.648 L 128.71,172.717 L 128.71,172.794 L 128.703,172.884 L 128.703,172.961 L 128.703,173.037 L 128.71,173.128 L 128.71,173.197 L 128.724,173.281 L 128.738,173.357 L 128.745,173.448 L 128.752,173.524 L 128.766,173.6 L 128.801,173.753 L 128.835,173.927 L 128.877,174.087 L 128.926,174.233 L 128.974,174.4 L 129.023,174.56 L 129.079,174.713 L 129.141,174.873 L 129.19,175.019 L 129.252,175.179 L 129.252,175.179 L 129.058,175.255 L 129.058,175.255 L 129.058,175.255z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 129.531 175.909 L 129.531,175.909 L 129.503,175.923 L 129.468,175.944 L 129.426,175.951 L 129.392,175.957 L 129.357,175.951 L 129.315,175.93 L 129.287,175.923 L 129.259,175.909 L 129.232,175.874 L 129.218,175.846 L 129.204,175.832 L 129.183,175.791 L 129.169,175.749 L 129.148,175.686 L 129.127,175.568 L 129.099,175.443 L 129.093,175.387 L 129.079,175.325 L 129.058,175.283 L 129.058,175.255 L 129.252,175.179 L 129.266,175.227 L 129.273,175.276 L 129.294,175.346 L 129.308,175.401 L 129.329,175.526 L 129.35,175.624 L 129.364,175.672 L 129.385,175.707 L 129.385,175.728 L 129.392,175.735 L 129.398,175.749 L 129.398,175.749 L 129.405,175.749 L 129.398,175.749 L 129.392,175.749 L 129.392,175.749 L 129.392,175.749 L 129.392,175.749 L 129.405,175.742 L 129.419,175.735 L 129.419,175.735 L 129.531,175.909 L 129.531,175.909 L 129.531,175.909z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 130.337 175.186 L 130.337,175.186 L 130.316,175.193 L 130.295,175.214 L 130.268,175.227 L 130.254,175.234 L 130.198,175.269 L 130.142,175.304 L 130.101,175.346 L 130.059,175.394 L 130.01,175.443 L 129.955,175.492 L 129.857,175.61 L 129.753,175.707 L 129.704,175.77 L 129.649,175.818 L 129.579,175.867 L 129.531,175.909 L 129.419,175.735 L 129.468,175.7 L 129.51,175.658 L 129.558,175.617 L 129.607,175.568 L 129.704,175.457 L 129.809,175.353 L 129.857,175.297 L 129.906,175.234 L 129.962,175.193 L 130.024,175.144 L 130.073,175.095 L 130.135,175.054 L 130.17,175.033 L 130.205,175.019 L 130.233,175.005 L 130.268,174.991 L 130.268,174.991 L 130.337,175.186 L 130.337,175.186 L 130.337,175.186z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 131.387 175.499 L 131.415,175.658 L 131.269,175.568 L 131.116,175.471 L 131.046,175.422 L 130.97,175.366 L 130.907,175.318 L 130.838,175.283 L 130.768,175.255 L 130.699,175.227 L 130.664,175.214 L 130.622,175.193 L 130.601,175.186 L 130.573,175.186 L 130.539,175.179 L 130.504,175.172 L 130.476,175.172 L 130.448,175.172 L 130.427,175.172 L 130.393,175.179 L 130.365,175.186 L 130.337,175.186 L 130.268,174.991 L 130.309,174.977 L 130.351,174.97 L 130.4,174.963 L 130.441,174.963 L 130.483,174.963 L 130.532,174.963 L 130.573,174.97 L 130.615,174.97 L 130.657,174.977 L 130.699,174.998 L 130.74,175.012 L 130.782,175.019 L 130.859,175.061 L 130.935,175.102 L 131.011,175.144 L 131.088,175.193 L 131.164,175.248 L 131.234,175.283 L 131.38,175.394 L 131.519,175.478 L 131.547,175.624 L 131.519,175.478 L 131.623,175.533 L 131.547,175.624 L 131.387,175.499z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 130.365 178.787 L 130.184,178.746 L 130.163,178.697 L 130.142,178.627 L 130.135,178.572 L 130.122,178.516 L 130.101,178.447 L 130.101,178.398 L 130.101,178.335 L 130.094,178.273 L 130.087,178.162 L 130.087,178.05 L 130.094,177.932 L 130.101,177.828 L 130.128,177.71 L 130.142,177.605 L 130.177,177.494 L 130.212,177.397 L 130.247,177.292 L 130.288,177.181 L 130.33,177.091 L 130.379,176.993 L 130.427,176.882 L 130.483,176.792 L 130.546,176.694 L 130.601,176.597 L 130.664,176.5 L 130.719,176.409 L 130.782,176.312 L 130.852,176.222 L 130.984,176.041 L 131.116,175.867 L 131.255,175.686 L 131.387,175.499 L 131.547,175.624 L 131.422,175.805 L 131.283,175.992 L 131.144,176.166 L 131.011,176.347 L 130.956,176.437 L 130.9,176.535 L 130.831,176.618 L 130.775,176.708 L 130.719,176.799 L 130.664,176.889 L 130.615,176.993 L 130.567,177.084 L 130.518,177.181 L 130.476,177.272 L 130.441,177.362 L 130.407,177.466 L 130.379,177.564 L 130.351,177.661 L 130.33,177.751 L 130.309,177.863 L 130.302,177.953 L 130.295,178.057 L 130.295,178.162 L 130.302,178.266 L 130.302,178.314 L 130.309,178.363 L 130.316,178.412 L 130.33,178.474 L 130.337,178.53 L 130.344,178.579 L 130.365,178.641 L 130.386,178.697 L 130.191,178.662 L 130.365,178.787 L 130.247,178.968 L 130.184,178.746 L 130.365,178.787z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 132.861 174.692 L 132.861,174.692 L 132.798,174.824 L 132.736,174.963 L 132.666,175.095 L 132.604,175.227 L 132.465,175.492 L 132.312,175.749 L 132.166,176.013 L 132.013,176.27 L 131.86,176.535 L 131.7,176.785 L 131.533,177.042 L 131.359,177.278 L 131.199,177.529 L 131.032,177.786 L 130.865,178.036 L 130.699,178.28 L 130.532,178.53 L 130.365,178.787 L 130.191,178.662 L 130.358,178.405 L 130.525,178.168 L 130.699,177.925 L 130.865,177.668 L 131.025,177.425 L 131.185,177.174 L 131.359,176.924 L 131.519,176.667 L 131.679,176.423 L 131.832,176.166 L 131.985,175.916 L 132.138,175.658 L 132.277,175.401 L 132.416,175.137 L 132.479,175.005 L 132.548,174.873 L 132.618,174.741 L 132.673,174.602 L 132.673,174.602 L 132.861,174.692 L 132.861,174.692 L 132.861,174.692z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 132.604 172.008 L 132.604,172.008 L 132.645,172.078 L 132.694,172.147 L 132.736,172.224 L 132.771,172.293 L 132.812,172.356 L 132.84,172.446 L 132.875,172.53 L 132.903,172.606 L 132.924,172.69 L 132.958,172.78 L 132.986,172.863 L 133,172.947 L 133.021,173.037 L 133.035,173.128 L 133.049,173.211 L 133.056,173.302 L 133.056,173.392 L 133.07,173.482 L 133.076,173.573 L 133.076,173.663 L 133.07,173.753 L 133.056,173.837 L 133.056,173.927 L 133.049,174.011 L 133.042,174.101 L 133.021,174.191 L 133.007,174.275 L 132.986,174.358 L 132.958,174.449 L 132.924,174.532 L 132.896,174.616 L 132.861,174.692 L 132.673,174.602 L 132.701,174.532 L 132.736,174.456 L 132.75,174.393 L 132.784,174.31 L 132.798,174.226 L 132.819,174.15 L 132.833,174.08 L 132.84,173.997 L 132.854,173.913 L 132.861,173.83 L 132.861,173.746 L 132.861,173.663 L 132.861,173.58 L 132.861,173.489 L 132.861,173.406 L 132.854,173.315 L 132.84,173.232 L 132.826,173.149 L 132.819,173.065 L 132.798,172.996 L 132.784,172.912 L 132.75,172.829 L 132.736,172.752 L 132.708,172.669 L 132.68,172.599 L 132.652,172.53 L 132.625,172.446 L 132.576,172.391 L 132.548,172.314 L 132.513,172.259 L 132.472,172.189 L 132.43,172.14 L 132.43,172.14 L 132.604,172.008 L 132.604,172.008 L 132.604,172.008z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 129.517 169.825 L 129.517,169.825 L 129.621,169.846 L 129.746,169.881 L 129.864,169.922 L 129.969,169.964 L 130.087,170.006 L 130.198,170.055 L 130.302,170.096 L 130.421,170.152 L 130.525,170.208 L 130.622,170.27 L 130.74,170.326 L 130.838,170.388 L 130.942,170.444 L 131.046,170.52 L 131.144,170.583 L 131.248,170.659 L 131.345,170.729 L 131.443,170.792 L 131.533,170.882 L 131.623,170.958 L 131.721,171.042 L 131.811,171.111 L 131.901,171.209 L 131.985,171.278 L 132.054,171.369 L 132.145,171.452 L 132.228,171.556 L 132.305,171.647 L 132.381,171.73 L 132.465,171.828 L 132.534,171.918 L 132.604,172.008 L 132.43,172.14 L 132.36,172.05 L 132.298,171.953 L 132.221,171.869 L 132.152,171.779 L 132.075,171.688 L 131.992,171.605 L 131.915,171.515 L 131.832,171.438 L 131.755,171.355 L 131.665,171.271 L 131.582,171.188 L 131.491,171.111 L 131.401,171.042 L 131.31,170.965 L 131.22,170.889 L 131.123,170.826 L 131.025,170.75 L 130.935,170.694 L 130.831,170.625 L 130.733,170.569 L 130.636,170.5 L 130.532,170.444 L 130.427,170.395 L 130.316,170.34 L 130.226,170.284 L 130.115,170.242 L 130.01,170.208 L 129.906,170.166 L 129.795,170.124 L 129.684,170.089 L 129.579,170.055 L 129.468,170.02 L 129.468,170.02 L 129.468,170.02 L 129.468,170.02 L 129.468,170.02 L 129.517,169.825z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 124.511 169.227 L 124.552,169.039 L 124.705,169.039 L 124.865,169.046 L 125.025,169.053 L 125.185,169.06 L 125.345,169.06 L 125.505,169.081 L 125.658,169.102 L 125.811,169.102 L 126.124,169.144 L 126.43,169.185 L 126.749,169.227 L 127.055,169.276 L 127.361,169.338 L 127.667,169.401 L 127.98,169.45 L 128.286,169.526 L 128.599,169.589 L 128.905,169.665 L 129.211,169.742 L 129.517,169.825 L 129.468,170.02 L 129.162,169.95 L 128.856,169.874 L 128.55,169.797 L 128.23,169.735 L 127.938,169.658 L 127.632,169.603 L 127.32,169.533 L 127.028,169.491 L 126.708,169.443 L 126.409,169.394 L 126.103,169.359 L 125.79,169.318 L 125.637,169.311 L 125.484,169.283 L 125.317,169.276 L 125.171,169.276 L 125.018,169.262 L 124.865,169.255 L 124.705,169.255 L 124.538,169.241 L 124.594,169.053 L 124.511,169.227 L 124.114,169.046 L 124.552,169.039 L 124.511,169.227z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 128.905 171.758 L 128.905,171.758 L 128.634,171.57 L 128.356,171.389 L 128.084,171.216 L 127.813,171.042 L 127.549,170.882 L 127.271,170.708 L 127,170.555 L 126.729,170.402 L 126.45,170.242 L 126.186,170.096 L 125.908,169.95 L 125.623,169.804 L 125.345,169.665 L 125.06,169.526 L 124.789,169.373 L 124.511,169.227 L 124.594,169.053 L 124.879,169.185 L 125.164,169.338 L 125.442,169.484 L 125.727,169.623 L 125.999,169.763 L 126.277,169.915 L 126.555,170.062 L 126.826,170.214 L 127.104,170.367 L 127.375,170.534 L 127.653,170.694 L 127.924,170.861 L 128.189,171.035 L 128.467,171.223 L 128.752,171.396 L 129.023,171.584 L 129.023,171.584 L 129.023,171.584 L 129.023,171.584 L 129.023,171.584 L 128.905,171.758z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 128.787 171.904 L 128.787,171.89 L 128.814,171.869 L 128.842,171.834 L 128.863,171.793 L 128.877,171.758 L 128.884,171.751 L 128.884,171.744 L 128.884,171.737 L 128.884,171.73 L 128.884,171.737 L 128.898,171.744 L 128.905,171.751 L 128.905,171.758 L 129.023,171.584 L 129.058,171.619 L 129.079,171.654 L 129.093,171.688 L 129.099,171.73 L 129.099,171.758 L 129.093,171.793 L 129.079,171.821 L 129.058,171.848 L 129.044,171.89 L 129.016,171.953 L 128.981,171.994 L 128.947,172.036 L 128.953,172.036 L 128.787,171.904 L 128.787,171.904 L 128.787,171.89 L 128.787,171.904z"/> + <path style="fill: #925f2c; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 123.141 172.092 L 123.204,172.231 L 123.28,172.363 L 123.35,172.502 L 123.426,172.648 L 123.496,172.787 L 123.565,172.926 L 123.635,173.058 L 123.711,173.197 L 123.788,173.336 L 123.857,173.454 L 123.927,173.6 L 124.01,173.733 L 124.087,173.872 L 124.17,174.004 L 124.253,174.136 L 124.337,174.268 L 124.33,174.233 L 124.33,174.226 L 124.33,174.205 L 124.33,174.185 L 124.33,174.171 L 124.337,174.143 L 124.344,174.136 L 124.351,174.129 L 124.358,174.108 L 124.365,174.101 L 124.379,174.094 L 124.385,174.08 L 124.406,174.066 L 124.42,174.059 L 124.434,174.052 L 124.448,174.052 L 124.49,174.052 L 124.532,174.052 L 124.573,174.052 L 124.622,174.052 L 124.705,174.052 L 124.789,174.052 L 124.83,174.052 L 124.872,174.052 L 124.907,174.052 L 124.949,174.052 L 124.97,174.052 L 125.004,174.038 L 125.032,174.018 L 125.053,174.011 L 125.074,173.976 L 125.095,173.955 L 125.102,173.92 L 125.102,173.879 L 125.122,173.837 L 125.129,173.795 L 125.136,173.753 L 125.136,173.712 L 125.136,173.67 L 125.129,173.628 L 125.122,173.58 L 125.102,173.545 L 125.102,173.51 L 125.095,173.475 L 125.074,173.448 L 125.053,173.413 L 125.039,173.406 L 125.025,173.406 L 125.011,173.392 L 124.997,173.385 L 124.956,173.371 L 124.921,173.371 L 124.879,173.371 L 124.83,173.385 L 124.789,173.392 L 124.747,173.406 L 124.664,173.427 L 124.58,173.448 L 124.559,173.454 L 124.538,173.454 L 124.525,173.454 L 124.518,173.454 L 124.511,173.454 L 124.511,173.454 L 124.448,173.343 L 124.392,173.232 L 124.351,173.128 L 124.323,173.009 L 124.309,172.912 L 124.295,172.801 L 124.295,172.704 L 124.302,172.585 L 124.316,172.488 L 124.344,172.391 L 124.365,172.279 L 124.406,172.182 L 124.448,172.092 L 124.497,171.98 L 124.538,171.883 L 124.608,171.786 L 124.671,171.688 L 124.726,171.598 L 124.796,171.487 L 124.865,171.396 L 125.004,171.209 L 125.143,171.007 L 125.213,170.917 L 125.275,170.819 L 125.345,170.715 L 125.408,170.618 L 125.47,170.527 L 125.533,170.43 L 125.581,170.326 L 125.623,170.228 L 125.533,170.228 L 125.428,170.235 L 125.317,170.242 L 125.227,170.256 L 125.129,170.27 L 125.032,170.284 L 124.942,170.312 L 124.844,170.326 L 124.747,170.36 L 124.657,170.395 L 124.559,170.416 L 124.469,170.451 L 124.274,170.527 L 124.1,170.59 L 123.913,170.666 L 123.739,170.75 L 123.551,170.826 L 123.363,170.889 L 123.273,170.924 L 123.183,170.965 L 123.092,170.993 L 122.988,171.014 L 122.898,171.049 L 122.793,171.063 L 122.703,171.091 L 122.606,171.097 L 122.64,171.167 L 122.682,171.223 L 122.71,171.271 L 122.752,171.341 L 122.821,171.459 L 122.884,171.584 L 122.946,171.709 L 123.009,171.834 L 123.071,171.967 L 123.141,172.092z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 124.434 174.226 L 124.253,174.317 L 124.163,174.185 L 124.08,174.052 L 124.003,173.927 L 123.92,173.788 L 123.843,173.656 L 123.767,173.517 L 123.69,173.385 L 123.621,173.253 L 123.551,173.107 L 123.468,172.968 L 123.398,172.836 L 123.322,172.704 L 123.259,172.558 L 123.19,172.412 L 123.113,172.272 L 123.044,172.14 L 123.231,172.043 L 123.301,172.182 L 123.363,172.314 L 123.44,172.453 L 123.509,172.599 L 123.579,172.745 L 123.655,172.87 L 123.732,173.009 L 123.801,173.142 L 123.871,173.274 L 123.947,173.413 L 124.031,173.538 L 124.1,173.684 L 124.184,173.816 L 124.26,173.934 L 124.344,174.066 L 124.427,174.205 L 124.233,174.282 L 124.434,174.226 L 124.594,174.831 L 124.253,174.317 L 124.434,174.226z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 124.469 174.15 L 124.469,174.164 L 124.462,174.164 L 124.462,174.164 L 124.448,174.164 L 124.448,174.171 L 124.448,174.171 L 124.441,174.171 L 124.441,174.178 L 124.441,174.178 L 124.434,174.185 L 124.434,174.185 L 124.434,174.185 L 124.434,174.191 L 124.434,174.205 L 124.434,174.212 L 124.434,174.226 L 124.434,174.226 L 124.233,174.282 L 124.226,174.261 L 124.226,174.226 L 124.226,174.205 L 124.226,174.178 L 124.226,174.143 L 124.233,174.129 L 124.246,174.094 L 124.26,174.066 L 124.267,174.052 L 124.288,174.032 L 124.309,174.011 L 124.33,173.997 L 124.351,173.969 L 124.379,173.969 L 124.406,173.962 L 124.427,173.955 L 124.427,173.955 L 124.469,174.15 L 124.469,174.164 L 124.469,174.164 L 124.469,174.15z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 125.129 174.08 L 125.129,174.08 L 125.095,174.108 L 125.046,174.136 L 125.004,174.143 L 124.956,174.15 L 124.914,174.164 L 124.872,174.164 L 124.83,174.164 L 124.789,174.164 L 124.698,174.15 L 124.615,174.143 L 124.573,174.143 L 124.538,174.143 L 124.504,174.15 L 124.469,174.15 L 124.427,173.955 L 124.476,173.948 L 124.525,173.934 L 124.573,173.934 L 124.622,173.934 L 124.705,173.948 L 124.796,173.955 L 124.83,173.955 L 124.865,173.955 L 124.9,173.955 L 124.928,173.955 L 124.949,173.948 L 124.963,173.934 L 124.97,173.927 L 124.983,173.927 L 124.983,173.927 L 124.983,173.927 L 124.983,173.927 L 124.983,173.927 L 125.129,174.08z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 125.129 173.35 L 125.129,173.35 L 125.157,173.392 L 125.185,173.434 L 125.199,173.475 L 125.22,173.524 L 125.227,173.573 L 125.234,173.621 L 125.234,173.67 L 125.234,173.712 L 125.234,173.76 L 125.234,173.823 L 125.227,173.872 L 125.22,173.913 L 125.199,173.962 L 125.185,174.004 L 125.157,174.045 L 125.129,174.08 L 124.983,173.927 L 124.99,173.92 L 124.997,173.906 L 125.004,173.879 L 125.018,173.858 L 125.025,173.83 L 125.025,173.795 L 125.025,173.753 L 125.032,173.712 L 125.025,173.684 L 125.025,173.649 L 125.025,173.614 L 125.018,173.58 L 125.004,173.538 L 124.99,173.524 L 124.99,173.496 L 124.97,173.489 L 124.97,173.489 L 125.129,173.35 L 125.129,173.35 L 125.129,173.35z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 124.601 173.406 L 124.601,173.406 L 124.559,173.364 L 124.532,173.357 L 124.518,173.357 L 124.518,173.357 L 124.532,173.357 L 124.559,173.35 L 124.622,173.322 L 124.712,173.302 L 124.768,173.295 L 124.817,173.274 L 124.865,173.274 L 124.921,173.267 L 124.97,173.274 L 125.025,173.281 L 125.06,173.295 L 125.081,173.308 L 125.102,173.322 L 125.129,173.35 L 124.97,173.489 L 124.97,173.489 L 124.97,173.489 L 124.97,173.489 L 124.97,173.489 L 124.949,173.482 L 124.914,173.482 L 124.886,173.482 L 124.851,173.489 L 124.81,173.489 L 124.775,173.496 L 124.684,173.531 L 124.622,173.538 L 124.58,173.559 L 124.552,173.566 L 124.532,173.573 L 124.504,173.566 L 124.469,173.545 L 124.427,173.51 L 124.427,173.51 L 124.601,173.406 L 124.601,173.406 L 124.601,173.406z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 125.623 170.124 L 125.727,170.277 L 125.665,170.367 L 125.623,170.479 L 125.561,170.576 L 125.491,170.673 L 125.428,170.778 L 125.366,170.882 L 125.296,170.965 L 125.227,171.063 L 125.088,171.264 L 124.949,171.452 L 124.879,171.556 L 124.817,171.654 L 124.754,171.744 L 124.698,171.841 L 124.643,171.932 L 124.58,172.036 L 124.538,172.126 L 124.504,172.231 L 124.483,172.272 L 124.469,172.314 L 124.462,172.356 L 124.441,172.412 L 124.427,172.467 L 124.427,172.516 L 124.406,172.565 L 124.406,172.606 L 124.399,172.662 L 124.399,172.704 L 124.399,172.752 L 124.399,172.794 L 124.406,172.843 L 124.406,172.891 L 124.42,172.947 L 124.427,172.996 L 124.441,173.044 L 124.448,173.093 L 124.469,173.142 L 124.49,173.19 L 124.511,173.239 L 124.538,173.295 L 124.566,173.35 L 124.601,173.406 L 124.427,173.51 L 124.385,173.454 L 124.351,173.399 L 124.323,173.336 L 124.302,173.274 L 124.274,173.218 L 124.253,173.162 L 124.233,173.1 L 124.226,173.037 L 124.212,172.989 L 124.205,172.926 L 124.191,172.87 L 124.191,172.801 L 124.191,172.752 L 124.191,172.704 L 124.191,172.641 L 124.191,172.578 L 124.205,172.53 L 124.219,172.474 L 124.226,172.412 L 124.233,172.356 L 124.253,172.314 L 124.267,172.259 L 124.288,172.196 L 124.309,172.14 L 124.351,172.043 L 124.406,171.932 L 124.462,171.834 L 124.518,171.73 L 124.58,171.633 L 124.643,171.535 L 124.705,171.431 L 124.782,171.341 L 124.914,171.139 L 125.06,170.951 L 125.129,170.847 L 125.192,170.75 L 125.262,170.666 L 125.317,170.562 L 125.387,170.472 L 125.435,170.367 L 125.491,170.277 L 125.54,170.187 L 125.623,170.326 L 125.623,170.124 L 125.79,170.131 L 125.727,170.277 L 125.623,170.124z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 122.515 171.167 L 122.592,171 L 122.682,170.979 L 122.772,170.965 L 122.87,170.938 L 122.967,170.924 L 123.058,170.882 L 123.148,170.861 L 123.231,170.833 L 123.336,170.792 L 123.509,170.729 L 123.697,170.659 L 123.878,170.576 L 124.059,170.493 L 124.246,170.43 L 124.427,170.36 L 124.525,170.319 L 124.622,170.284 L 124.712,170.263 L 124.817,170.228 L 124.907,170.208 L 125.011,170.187 L 125.102,170.166 L 125.213,170.145 L 125.317,170.138 L 125.421,170.131 L 125.526,170.124 L 125.623,170.124 L 125.623,170.326 L 125.533,170.326 L 125.428,170.34 L 125.338,170.347 L 125.234,170.36 L 125.143,170.367 L 125.06,170.395 L 124.963,170.409 L 124.865,170.437 L 124.782,170.458 L 124.684,170.493 L 124.594,170.527 L 124.504,170.555 L 124.316,170.618 L 124.142,170.701 L 123.954,170.778 L 123.774,170.84 L 123.579,170.924 L 123.405,171 L 123.308,171.021 L 123.217,171.056 L 123.12,171.097 L 123.016,171.125 L 122.925,171.139 L 122.821,171.174 L 122.71,171.188 L 122.619,171.209 L 122.689,171.049 L 122.515,171.167 L 122.425,171.014 L 122.592,171 L 122.515,171.167z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 123.044 172.14 L 123.044,172.14 L 122.974,172.008 L 122.918,171.883 L 122.842,171.751 L 122.786,171.633 L 122.731,171.515 L 122.668,171.389 L 122.626,171.327 L 122.592,171.271 L 122.557,171.223 L 122.515,171.167 L 122.689,171.049 L 122.731,171.097 L 122.765,171.167 L 122.8,171.223 L 122.842,171.285 L 122.918,171.41 L 122.974,171.535 L 123.044,171.661 L 123.106,171.793 L 123.169,171.918 L 123.231,172.043 L 123.231,172.043 L 123.044,172.14 L 123.044,172.14 L 123.044,172.14z"/> + <path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 127.257 174.164 L 127.285,174.15 L 127.32,174.15 L 127.361,174.143 L 127.403,174.143 L 127.479,174.143 L 127.556,174.15 L 127.625,174.15 L 127.681,174.15 L 127.702,174.143 L 127.709,174.143 L 127.73,174.143 L 127.737,174.136 L 127.751,174.045 L 127.772,173.955 L 127.778,173.879 L 127.778,173.795 L 127.765,173.746 L 127.744,173.684 L 127.709,173.642 L 127.681,173.587 L 127.639,173.559 L 127.591,173.531 L 127.535,173.496 L 127.479,173.475 L 127.424,173.454 L 127.347,173.448 L 127.278,173.434 L 127.208,173.413 L 127.132,173.413 L 127.048,173.406 L 126.972,173.406 L 126.882,173.406 L 126.722,173.399 L 126.548,173.392 L 126.464,173.385 L 126.388,173.371 L 126.304,173.364 L 126.228,173.357 L 126.158,173.343 L 126.089,173.322 L 126.012,173.308 L 125.957,173.274 L 125.971,173.343 L 125.985,173.406 L 126.005,173.454 L 126.026,173.524 L 126.047,173.58 L 126.068,173.621 L 126.096,173.684 L 126.124,173.733 L 126.145,173.774 L 126.179,173.823 L 126.207,173.865 L 126.242,173.906 L 126.277,173.927 L 126.311,173.969 L 126.346,174.011 L 126.388,174.038 L 126.43,174.052 L 126.471,174.087 L 126.513,174.101 L 126.562,174.136 L 126.61,174.143 L 126.659,174.164 L 126.708,174.178 L 126.763,174.185 L 126.819,174.185 L 126.875,174.185 L 126.937,174.185 L 126.993,174.185 L 127.055,174.185 L 127.118,174.185 L 127.187,174.178 L 127.257,174.164z"/> + <path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 125.234 176.277 L 125.331,176.277 L 125.428,176.277 L 125.519,176.277 L 125.616,176.277 L 125.707,176.277 L 125.797,176.277 L 125.901,176.277 L 125.992,176.277 L 125.88,176.187 L 125.769,176.09 L 125.651,175.999 L 125.533,175.916 L 125.47,175.874 L 125.408,175.839 L 125.345,175.791 L 125.275,175.756 L 125.22,175.728 L 125.143,175.693 L 125.088,175.658 L 125.025,175.617 L 125.025,175.665 L 125.032,175.707 L 125.032,175.749 L 125.032,175.791 L 125.025,175.839 L 125.025,175.881 L 125.025,175.923 L 125.011,175.957 L 124.99,176.041 L 124.97,176.124 L 124.949,176.194 L 124.914,176.277 L 124.99,176.277 L 125.074,176.277 L 125.143,176.277 L 125.234,176.277z"/> + <path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 125.449 177.584 L 125.644,177.584 L 125.832,177.584 L 126.026,177.584 L 126.207,177.584 L 126.395,177.584 L 126.59,177.584 L 126.777,177.584 L 126.965,177.584 L 126.93,177.557 L 126.882,177.522 L 126.854,177.494 L 126.812,177.48 L 126.77,177.452 L 126.729,177.438 L 126.68,177.411 L 126.638,177.397 L 126.548,177.369 L 126.464,177.355 L 126.388,177.341 L 126.311,177.32 L 126.221,177.313 L 126.124,177.292 L 126.026,177.272 L 125.929,177.251 L 125.825,177.23 L 125.727,177.216 L 125.665,177.195 L 125.623,177.188 L 125.574,177.181 L 125.526,177.181 L 125.47,177.181 L 125.428,177.181 L 125.373,177.188 L 125.317,177.195 L 125.275,177.209 L 125.227,177.223 L 125.185,177.23 L 125.136,177.265 L 125.095,177.278 L 125.046,177.313 L 125.004,177.348 L 124.963,177.39 L 124.921,177.431 L 124.886,177.48 L 124.844,177.529 L 124.81,177.584 L 124.886,177.584 L 124.97,177.584 L 125.053,177.584 L 125.129,177.584 L 125.213,177.584 L 125.296,177.584 L 125.373,177.584 L 125.449,177.584z"/> + <path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 125.574 178.05 L 125.512,178.078 L 125.47,178.099 L 125.463,178.106 L 125.449,178.12 L 125.442,178.134 L 125.442,178.141 L 125.442,178.148 L 125.442,178.162 L 125.449,178.162 L 125.463,178.175 L 125.477,178.182 L 125.505,178.203 L 125.567,178.231 L 125.623,178.266 L 125.637,178.273 L 125.651,178.273 L 125.658,178.294 L 125.665,178.301 L 125.665,178.314 L 125.665,178.321 L 125.665,178.335 L 125.665,178.349 L 125.7,178.356 L 125.72,178.356 L 125.748,178.356 L 125.755,178.356 L 125.79,178.356 L 125.811,178.356 L 125.825,178.349 L 125.853,178.342 L 125.887,178.321 L 125.922,178.308 L 125.95,178.273 L 125.985,178.259 L 126.04,178.189 L 126.096,178.141 L 126.124,178.099 L 126.145,178.064 L 126.179,178.05 L 126.207,178.015 L 126.131,178.015 L 126.047,178.009 L 125.964,178.009 L 125.88,178.009 L 125.839,178.002 L 125.797,178.009 L 125.755,178.009 L 125.72,178.009 L 125.679,178.009 L 125.644,178.029 L 125.609,178.036 L 125.574,178.05z"/> + <path style="fill: #d1dfe9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 126.708 191.872 L 124.712,185.963 L 125.039,181.172 L 125.686,180.525 L 126.77,182.528 L 130.275,179.705 L 130.275,179.768 L 130.295,179.837 L 130.302,179.9 L 130.33,179.962 L 130.351,180.032 L 130.386,180.094 L 130.427,180.164 L 130.462,180.226 L 130.504,180.275 L 130.546,180.345 L 130.594,180.4 L 130.643,180.449 L 130.692,180.518 L 130.747,180.567 L 130.796,180.616 L 130.859,180.665 L 130.963,180.769 L 131.067,180.845 L 131.158,180.922 L 131.248,180.991 L 131.38,181.075 L 131.422,181.096 L 129.788,186.289 L 126.972,191.434 L 126.708,191.872z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 124.608 185.956 L 124.817,185.928 L 126.812,191.831 L 126.61,191.907 L 124.615,185.997 L 124.608,185.956 L 124.615,185.997 L 124.608,185.969 L 124.608,185.956z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 124.963 181.096 L 125.143,181.179 L 124.817,185.969 L 124.608,185.956 L 124.928,181.165 L 124.963,181.096 L 124.928,181.165 L 124.928,181.123 L 124.963,181.096z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 125.776 180.477 L 125.755,180.602 L 125.102,181.249 L 124.963,181.096 L 125.609,180.442 L 125.776,180.477 L 125.609,180.442 L 125.707,180.352 L 125.776,180.477z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 126.826 182.618 L 126.666,182.583 L 125.581,180.567 L 125.776,180.477 L 126.861,182.486 L 126.826,182.618 L 126.826,182.618 L 126.736,182.695 L 126.666,182.583 L 126.826,182.618z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 130.344 179.788 L 126.826,182.618 L 126.701,182.444 L 130.219,179.615 L 130.344,179.788z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 131.373 181.193 L 131.317,181.158 L 131.185,181.075 L 131.102,181.005 L 130.998,180.922 L 130.9,180.838 L 130.782,180.748 L 130.726,180.692 L 130.664,180.644 L 130.622,180.581 L 130.567,180.525 L 130.511,180.47 L 130.462,180.4 L 130.421,180.352 L 130.372,180.268 L 130.33,180.213 L 130.295,180.136 L 130.261,180.074 L 130.233,180.004 L 130.212,179.928 L 130.191,179.858 L 130.184,179.816 L 130.184,179.782 L 130.177,179.74 L 130.177,179.705 L 130.386,179.705 L 130.386,179.733 L 130.386,179.754 L 130.386,179.788 L 130.393,179.816 L 130.414,179.879 L 130.427,179.928 L 130.448,179.99 L 130.476,180.053 L 130.504,180.101 L 130.546,180.164 L 130.587,180.226 L 130.622,180.268 L 130.664,180.338 L 130.719,180.393 L 130.768,180.442 L 130.824,180.484 L 130.872,180.539 L 130.921,180.595 L 131.025,180.685 L 131.13,180.769 L 131.227,180.831 L 131.304,180.901 L 131.436,180.991 L 131.484,181.005 L 131.373,181.193z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 129.885 186.338 L 129.697,186.261 L 131.331,181.075 L 131.526,181.137 L 129.892,186.31 L 129.885,186.338 L 129.892,186.31 L 129.885,186.331 L 129.885,186.338z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 126.882 191.386 L 129.704,186.227 L 129.885,186.338 L 127.069,191.483 L 126.882,191.386z"/> + <path style="fill: #075f87; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 125.741 190.308 L 126.548,183.953 L 126.012,183.181 L 126.437,182.597 L 126.708,182.917 L 127.146,182.639 L 127.577,183.355 L 127.146,183.898 L 127.897,191.135 L 125.741,190.308z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 126.624 183.884 L 126.652,183.96 L 125.839,190.315 L 125.623,190.294 L 126.444,183.939 L 126.624,183.884 L 126.624,183.884 L 126.659,183.918 L 126.652,183.96 L 126.624,183.884z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 125.929 183.126 L 126.096,183.126 L 126.624,183.884 L 126.464,184.009 L 125.929,183.251 L 125.929,183.126 L 125.929,183.251 L 125.88,183.181 L 125.929,183.126z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 126.52 182.521 L 126.527,182.653 L 126.096,183.251 L 125.929,183.126 L 126.353,182.528 L 126.52,182.521 L 126.353,182.528 L 126.43,182.424 L 126.52,182.521z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 126.77 183.008 L 126.624,182.973 L 126.36,182.66 L 126.52,182.521 L 126.791,182.841 L 126.77,183.008 L 126.77,183.008 L 126.694,183.049 L 126.624,182.973 L 126.77,183.008z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 127.229 182.597 L 127.187,182.736 L 126.77,183.008 L 126.659,182.827 L 127.083,182.556 L 127.229,182.597 L 127.083,182.556 L 127.174,182.493 L 127.229,182.597z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 127.66 183.418 L 127.486,183.397 L 127.055,182.702 L 127.229,182.597 L 127.667,183.3 L 127.66,183.418 L 127.667,183.3 L 127.702,183.355 L 127.66,183.418z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 127.035 183.905 L 127.055,183.828 L 127.493,183.279 L 127.66,183.418 L 127.229,183.96 L 127.035,183.905 L 127.035,183.905 L 127.035,183.863 L 127.055,183.828 L 127.035,183.905z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 127.792 191.135 L 127.035,183.905 L 127.243,183.877 L 128.001,191.128 L 127.792,191.135z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 124.518 173.545 L 124.907,173.336 L 125.143,173.684 L 125.039,173.969 L 124.469,173.872 L 124.518,173.545z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 124.997 173.274 L 124.963,173.434 L 124.566,173.642 L 124.469,173.454 L 124.865,173.253 L 124.997,173.274z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 125.248 173.712 L 125.06,173.746 L 124.83,173.406 L 124.997,173.274 L 125.227,173.621 L 125.248,173.712z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 125.025 174.08 L 124.949,173.927 L 125.053,173.649 L 125.248,173.712 L 125.143,174.011 L 125.025,174.08z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 124.365 173.844 L 124.483,173.753 L 125.06,173.872 L 125.025,174.08 L 124.448,173.969 L 124.365,173.844z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 124.469 173.454 L 124.622,173.573 L 124.573,173.879 L 124.365,173.844 L 124.42,173.531 L 124.469,173.454z"/> + <path style="fill: #aaacaf; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 138.979 183.925 L 136.956,182.597 L 134.794,182.236 L 131.589,180.984 L 130.268,185.26 L 127.264,190.308 L 126.43,191.094 L 124.754,186.595 L 124.691,184.836 L 124.907,182.66 L 125.185,180.776 L 121.556,182.173 L 118.427,183.571 L 118.01,188.007 L 118.629,191.858 L 134.662,191.858 L 134.71,191.865 L 134.849,191.879 L 134.947,191.893 L 135.065,191.9 L 135.204,191.9 L 135.35,191.9 L 135.51,191.9 L 135.684,191.9 L 135.865,191.879 L 136.052,191.858 L 136.254,191.831 L 136.456,191.789 L 136.657,191.74 L 136.866,191.685 L 137.053,191.615 L 137.262,191.525 L 137.464,191.434 L 137.658,191.309 L 137.846,191.177 L 138.02,191.031 L 138.194,190.864 L 138.347,190.677 L 138.486,190.468 L 138.618,190.245 L 138.729,189.995 L 138.819,189.703 L 138.896,189.404 L 138.945,189.084 L 138.965,188.73 L 138.979,188.347 L 138.952,187.437 L 138.938,186.658 L 138.924,185.99 L 138.917,185.441 L 138.91,184.996 L 138.91,184.641 L 138.917,184.363 L 138.924,184.169 L 138.931,184.03 L 138.938,183.946 L 138.945,183.911 L 138.945,183.898 L 138.952,183.877 L 138.952,183.877 L 138.959,183.877 L 138.965,183.884 L 138.965,183.898 L 138.965,183.905 L 138.965,183.918 L 138.979,183.925z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 136.977 182.486 L 137.012,182.507 L 139.028,183.835 L 138.917,184.009 L 136.901,182.681 L 136.977,182.486 L 136.977,182.486 L 136.991,182.486 L 137.012,182.507 L 136.977,182.486z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 134.759 182.34 L 134.815,182.138 L 136.977,182.486 L 136.942,182.702 L 134.787,182.347 L 134.759,182.34 L 134.787,182.347 L 134.773,182.347 L 134.759,182.34z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 131.491 180.95 L 131.623,180.88 L 134.836,182.138 L 134.759,182.34 L 131.547,181.075 L 131.491,180.95 L 131.491,180.95 L 131.526,180.838 L 131.623,180.88 L 131.491,180.95z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 130.358 185.309 L 130.17,185.226 L 131.491,180.95 L 131.693,181.005 L 130.372,185.295 L 130.358,185.309 L 130.372,185.295 L 130.365,185.302 L 130.358,185.309z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 127.34 190.398 L 127.181,190.259 L 130.184,185.212 L 130.358,185.309 L 127.361,190.378 L 127.34,190.398 L 127.361,190.378 L 127.347,190.385 L 127.34,190.398z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 126.339 191.128 L 126.36,191.003 L 127.201,190.245 L 127.34,190.398 L 126.506,191.17 L 126.339,191.128 L 126.506,191.17 L 126.388,191.268 L 126.339,191.128z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 124.664 186.602 L 124.865,186.56 L 126.534,191.045 L 126.339,191.128 L 124.671,186.637 L 124.664,186.602 L 124.671,186.637 L 124.664,186.616 L 124.664,186.602z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 124.58 184.829 L 124.796,184.829 L 124.865,186.595 L 124.664,186.602 L 124.58,184.836 L 124.58,184.829 L 124.58,184.836 L 124.58,184.829 L 124.58,184.829z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 124.796 182.646 L 125.004,182.681 L 124.796,184.843 L 124.58,184.829 L 124.796,182.653 L 124.796,182.646 L 124.796,182.653 L 124.796,182.653 L 124.796,182.646z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 125.143 180.665 L 125.275,180.783 L 125.004,182.681 L 124.796,182.646 L 125.081,180.748 L 125.143,180.665 L 125.143,180.665 L 125.31,180.609 L 125.275,180.783 L 125.143,180.665z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 121.514 182.083 L 121.514,182.076 L 125.143,180.665 L 125.22,180.866 L 121.584,182.271 L 121.514,182.083 L 121.514,182.083 L 121.514,182.076 L 121.514,182.076 L 121.514,182.083z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 118.323 183.571 L 118.385,183.48 L 121.514,182.083 L 121.597,182.271 L 118.469,183.668 L 118.323,183.571 L 118.323,183.571 L 118.323,183.508 L 118.385,183.48 L 118.323,183.571z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 117.905 188.007 L 117.905,187.993 L 118.323,183.571 L 118.524,183.578 L 118.107,188.007 L 117.905,188.007 L 117.905,188.007 L 117.905,188.007 L 117.905,187.993 L 117.905,188.007z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 118.629 191.963 L 118.531,191.872 L 117.905,188.007 L 118.107,187.986 L 118.74,191.838 L 118.629,191.963 L 118.629,191.963 L 118.538,191.963 L 118.531,191.872 L 118.629,191.963z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 134.676 191.761 L 134.662,191.963 L 118.629,191.963 L 118.629,191.761 L 134.662,191.761 L 134.676,191.761 L 134.662,191.761 L 134.662,191.761 L 134.676,191.761z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 139.077 188.347 L 139.077,188.347 L 139.077,188.445 L 139.077,188.549 L 139.077,188.639 L 139.077,188.737 L 139.07,188.827 L 139.063,188.917 L 139.056,189.008 L 139.049,189.091 L 139.035,189.182 L 139.021,189.265 L 139.007,189.349 L 138.993,189.432 L 138.979,189.515 L 138.959,189.578 L 138.945,189.654 L 138.924,189.745 L 138.903,189.814 L 138.875,189.877 L 138.854,189.953 L 138.826,190.03 L 138.792,190.092 L 138.771,190.162 L 138.743,190.225 L 138.708,190.287 L 138.68,190.35 L 138.646,190.405 L 138.618,190.461 L 138.583,190.524 L 138.541,190.579 L 138.507,190.635 L 138.465,190.69 L 138.423,190.746 L 138.347,190.836 L 138.263,190.927 L 138.18,191.024 L 138.096,191.115 L 137.999,191.184 L 137.909,191.261 L 137.811,191.337 L 137.714,191.393 L 137.617,191.462 L 137.512,191.518 L 137.415,191.566 L 137.311,191.615 L 137.206,191.664 L 137.095,191.706 L 136.991,191.747 L 136.894,191.789 L 136.782,191.817 L 136.678,191.852 L 136.574,191.872 L 136.469,191.9 L 136.372,191.914 L 136.268,191.942 L 136.17,191.949 L 136.066,191.963 L 135.969,191.984 L 135.871,191.984 L 135.781,191.998 L 135.691,192.005 L 135.51,192.005 L 135.35,192.005 L 135.197,192.005 L 135.065,192.005 L 134.947,191.998 L 134.836,191.984 L 134.703,191.97 L 134.641,191.963 L 134.676,191.761 L 134.724,191.768 L 134.863,191.782 L 134.954,191.789 L 135.072,191.789 L 135.204,191.796 L 135.35,191.796 L 135.503,191.796 L 135.677,191.789 L 135.767,191.789 L 135.858,191.775 L 135.948,191.768 L 136.045,191.761 L 136.136,191.74 L 136.226,191.726 L 136.33,191.706 L 136.428,191.692 L 136.532,191.664 L 136.629,191.643 L 136.727,191.615 L 136.824,191.587 L 136.921,191.56 L 137.026,191.518 L 137.13,191.476 L 137.22,191.434 L 137.318,191.386 L 137.415,191.337 L 137.505,191.274 L 137.603,191.219 L 137.693,191.163 L 137.784,191.094 L 137.867,191.031 L 137.95,190.955 L 138.034,190.871 L 138.117,190.788 L 138.194,190.697 L 138.263,190.614 L 138.305,190.565 L 138.34,190.517 L 138.375,190.461 L 138.402,190.419 L 138.43,190.357 L 138.465,190.308 L 138.5,190.252 L 138.527,190.197 L 138.555,190.134 L 138.583,190.079 L 138.611,190.009 L 138.632,189.953 L 138.66,189.877 L 138.68,189.821 L 138.701,189.745 L 138.722,189.682 L 138.743,189.613 L 138.757,189.536 L 138.778,189.467 L 138.792,189.39 L 138.806,189.314 L 138.819,189.23 L 138.833,189.154 L 138.833,189.07 L 138.847,188.987 L 138.861,188.904 L 138.861,188.813 L 138.861,188.73 L 138.868,188.639 L 138.868,188.549 L 138.868,188.445 L 138.868,188.354 L 138.868,188.354 L 139.077,188.347 L 139.077,188.347 L 139.077,188.347z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 139.028 183.835 L 138.868,183.946 L 138.868,183.946 L 138.868,183.925 L 138.868,183.925 L 138.868,183.939 L 138.896,183.96 L 138.986,183.974 L 139.042,183.939 L 139.049,183.918 L 139.049,183.925 L 139.042,183.953 L 139.035,184.037 L 139.028,184.169 L 139.021,184.363 L 139.021,184.641 L 139.021,184.996 L 139.021,185.434 L 139.028,185.99 L 139.042,186.651 L 139.056,187.43 L 139.077,188.347 L 138.868,188.354 L 138.847,187.437 L 138.833,186.658 L 138.819,185.99 L 138.813,185.441 L 138.813,184.996 L 138.813,184.641 L 138.819,184.363 L 138.819,184.162 L 138.826,184.016 L 138.833,183.925 L 138.833,183.898 L 138.847,183.863 L 138.861,183.828 L 138.917,183.779 L 139.021,183.793 L 139.056,183.835 L 139.063,183.863 L 139.063,183.877 L 139.07,183.905 L 139.077,183.911 L 138.917,184.009 L 139.077,183.911 L 139.111,184.141 L 138.917,184.009 L 139.028,183.835z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 120.909 188.876 L 121.319,194.563 L 121.104,194.57 L 120.701,188.883 L 120.909,188.876z"/> + <path style="fill: #f4ddd2; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 118.74 185.226 L 117.481,182.91 L 118.531,179.128 L 118.107,174.49 L 115.187,172.585 L 113.31,173.009 L 111.001,173.649 L 111.001,181.075 L 112.364,181.179 L 114.033,181.332 L 113.929,183.536 L 111.412,185.441 L 112.468,187.965 L 116.021,190.079 L 118.74,185.226z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 117.391 182.882 L 117.579,182.862 L 118.83,185.177 L 118.649,185.274 L 117.391,182.966 L 117.391,182.882 L 117.391,182.966 L 117.377,182.924 L 117.391,182.882z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 118.629 179.107 L 118.629,179.142 L 117.586,182.931 L 117.391,182.882 L 118.427,179.093 L 118.629,179.107 L 118.629,179.107 L 118.629,179.128 L 118.629,179.142 L 118.629,179.107z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 118.17 174.4 L 118.218,174.477 L 118.629,179.107 L 118.427,179.128 L 118.01,174.49 L 118.17,174.4 L 118.17,174.4 L 118.211,174.435 L 118.218,174.477 L 118.17,174.4z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 115.152 172.488 L 115.236,172.502 L 118.17,174.4 L 118.052,174.574 L 115.124,172.676 L 115.152,172.488 L 115.152,172.488 L 115.194,172.488 L 115.236,172.502 L 115.152,172.488z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 113.275 172.912 L 113.282,172.912 L 115.152,172.488 L 115.208,172.697 L 113.324,173.121 L 113.275,172.912 L 113.275,172.912 L 113.275,172.912 L 113.282,172.912 L 113.275,172.912z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 110.89 173.649 L 110.974,173.538 L 113.275,172.912 L 113.324,173.121 L 111.022,173.746 L 110.89,173.649 L 110.89,173.649 L 110.89,173.566 L 110.974,173.538 L 110.89,173.649z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 110.994 181.172 L 110.89,181.075 L 110.89,173.649 L 111.106,173.649 L 111.106,181.075 L 110.994,181.172 L 110.994,181.172 L 110.89,181.165 L 110.89,181.075 L 110.994,181.172z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 112.371 181.075 L 112.35,181.276 L 110.994,181.172 L 111.008,180.963 L 112.371,181.075 L 112.371,181.075 L 112.371,181.075 L 112.371,181.075 L 112.371,181.075z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 114.144 181.339 L 114.019,181.443 L 112.35,181.276 L 112.371,181.075 L 114.04,181.228 L 114.144,181.339 L 114.04,181.228 L 114.144,181.235 L 114.144,181.339z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 113.991 183.619 L 113.831,183.529 L 113.929,181.318 L 114.144,181.339 L 114.033,183.55 L 113.991,183.619 L 114.033,183.55 L 114.033,183.599 L 113.991,183.619z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 111.321 185.483 L 111.356,185.351 L 113.873,183.453 L 113.991,183.619 L 111.481,185.525 L 111.321,185.483 L 111.321,185.483 L 111.293,185.399 L 111.356,185.351 L 111.321,185.483z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 112.413 188.048 L 112.371,188.007 L 111.321,185.483 L 111.502,185.399 L 112.566,187.916 L 112.413,188.048 L 112.413,188.048 L 112.392,188.041 L 112.371,188.007 L 112.413,188.048z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 116.105 190.12 L 115.966,190.162 L 112.413,188.048 L 112.517,187.875 L 116.063,189.988 L 116.105,190.12 L 116.105,190.12 L 116.056,190.218 L 115.966,190.162 L 116.105,190.12z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 118.83 185.177 L 118.83,185.274 L 116.105,190.12 L 115.924,190.023 L 118.649,185.177 L 118.83,185.177 L 118.83,185.177 L 118.858,185.226 L 118.83,185.274 L 118.83,185.177z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 114.269 179.1 L 113.49,178.961 L 113.219,179.051 L 112.955,178.968 L 112.545,178.843 L 112.663,179.295 L 113.032,179.642 L 113.497,179.962 L 113.518,179.552 L 113.789,179.392 L 113.101,179.538 L 112.99,179.364 L 113.052,179.191 L 113.49,179.191 L 114.269,179.1z"/> + <path style="fill: #925f2c; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 117.064 171.111 L 119.991,172.585 L 120.826,174.059 L 121.236,176.583 L 121.667,178.704 L 121.667,180.602 L 120.193,182.702 L 117.064,182.702 L 115.813,181.86 L 116.23,179.962 L 116.432,177.863 L 116.64,175.957 L 116.021,174.699 L 114.763,173.441 L 114.978,174.908 L 113.713,173.649 L 112.26,173.858 L 111.836,174.699 L 112.051,176.173 L 111.738,177.598 L 111.87,178.746 L 112.149,180.226 L 112.67,181.012 L 114.353,181.228 L 113.929,182.062 L 111.001,182.062 L 109.952,179.962 L 110.584,177.647 L 110.369,175.533 L 111.001,173.441 L 112.26,171.535 L 114.144,170.91 L 117.064,171.111z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 120.082 172.537 L 119.95,172.69 L 117.016,171.216 L 117.106,171.014 L 120.033,172.495 L 120.082,172.537 L 120.033,172.495 L 120.061,172.516 L 120.082,172.537z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 120.93 174.052 L 120.735,174.122 L 119.901,172.648 L 120.082,172.537 L 120.916,174.011 L 120.93,174.052 L 120.916,174.011 L 120.923,174.032 L 120.93,174.052z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 121.145 176.618 L 121.145,176.611 L 120.714,174.087 L 120.93,174.052 L 121.347,176.576 L 121.145,176.618 L 121.145,176.618 L 121.145,176.611 L 121.145,176.611 L 121.145,176.618z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 121.757 178.704 L 121.556,178.725 L 121.145,176.618 L 121.347,176.576 L 121.757,178.683 L 121.757,178.704 L 121.757,178.683 L 121.757,178.69 L 121.757,178.704z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 121.75 180.651 L 121.556,180.602 L 121.556,178.704 L 121.757,178.704 L 121.757,180.602 L 121.75,180.651 L 121.757,180.602 L 121.757,180.623 L 121.75,180.651z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 120.193 182.799 L 120.103,182.639 L 121.577,180.532 L 121.75,180.651 L 120.276,182.757 L 120.193,182.799 L 120.276,182.757 L 120.256,182.799 L 120.193,182.799z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 117.002 182.792 L 117.064,182.597 L 120.193,182.597 L 120.193,182.799 L 117.064,182.799 L 117.002,182.792 L 117.064,182.799 L 117.029,182.799 L 117.002,182.792z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 115.708 181.833 L 115.868,181.77 L 117.12,182.618 L 117.002,182.792 L 115.75,181.951 L 115.708,181.833 L 115.75,181.951 L 115.688,181.909 L 115.708,181.833z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 116.327 179.969 L 116.327,179.976 L 115.91,181.874 L 115.708,181.833 L 116.126,179.941 L 116.327,179.969 L 116.327,179.969 L 116.327,179.969 L 116.327,179.976 L 116.327,179.969z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 116.334 177.842 L 116.536,177.869 L 116.327,179.969 L 116.119,179.955 L 116.334,177.842 L 116.334,177.842 L 116.334,177.842 L 116.334,177.842 L 116.334,177.842z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 116.737 175.916 L 116.751,175.964 L 116.536,177.869 L 116.334,177.842 L 116.543,175.951 L 116.737,175.916 L 116.737,175.916 L 116.751,175.944 L 116.751,175.964 L 116.737,175.916z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 116.091 174.623 L 116.105,174.65 L 116.737,175.916 L 116.543,176.006 L 115.924,174.748 L 116.091,174.623 L 116.091,174.623 L 116.105,174.629 L 116.105,174.65 L 116.091,174.623z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 114.665 173.448 L 114.832,173.357 L 116.091,174.623 L 115.945,174.775 L 114.693,173.51 L 114.665,173.448 L 114.665,173.448 L 114.617,173.142 L 114.832,173.357 L 114.665,173.448z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 114.902 174.977 L 114.874,174.922 L 114.665,173.448 L 114.867,173.413 L 115.076,174.901 L 114.902,174.977 L 115.076,174.901 L 115.117,175.207 L 114.902,174.977z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 113.713 173.538 L 113.789,173.573 L 115.048,174.838 L 114.902,174.977 L 113.643,173.712 L 113.713,173.538 L 113.713,173.538 L 113.755,173.531 L 113.789,173.573 L 113.713,173.538z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 112.169 173.802 L 112.239,173.753 L 113.713,173.538 L 113.734,173.753 L 112.274,173.962 L 112.169,173.802 L 112.169,173.802 L 112.19,173.753 L 112.239,173.753 L 112.169,173.802z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 111.738 174.713 L 111.752,174.65 L 112.169,173.802 L 112.35,173.906 L 111.933,174.748 L 111.738,174.713 L 111.738,174.713 L 111.738,174.685 L 111.752,174.65 L 111.738,174.713z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 112.149 176.194 L 111.954,176.187 L 111.738,174.713 L 111.947,174.685 L 112.149,176.152 L 112.149,176.194 L 112.149,176.152 L 112.149,176.173 L 112.149,176.194z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 111.627 177.605 L 111.627,177.571 L 111.954,176.145 L 112.149,176.194 L 111.836,177.619 L 111.627,177.605 L 111.627,177.605 L 111.627,177.584 L 111.627,177.571 L 111.627,177.605z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 111.759 178.773 L 111.759,178.759 L 111.627,177.605 L 111.836,177.577 L 111.975,178.746 L 111.759,178.773 L 111.759,178.773 L 111.759,178.773 L 111.759,178.759 L 111.759,178.773z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 112.065 180.289 L 112.051,180.247 L 111.759,178.773 L 111.968,178.739 L 112.26,180.206 L 112.065,180.289 L 112.065,180.289 L 112.058,180.268 L 112.051,180.247 L 112.065,180.289z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 112.663 181.116 L 112.587,181.075 L 112.065,180.289 L 112.239,180.171 L 112.76,180.957 L 112.663,181.116 L 112.663,181.116 L 112.621,181.116 L 112.587,181.075 L 112.663,181.116z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 114.436 181.269 L 114.339,181.332 L 112.663,181.116 L 112.691,180.908 L 114.36,181.123 L 114.436,181.269 L 114.36,181.123 L 114.499,181.137 L 114.436,181.269z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 113.929 182.173 L 113.831,182.013 L 114.255,181.179 L 114.436,181.269 L 114.019,182.118 L 113.929,182.173 L 114.019,182.118 L 113.991,182.173 L 113.929,182.173z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 110.911 182.118 L 111.001,181.965 L 113.929,181.965 L 113.929,182.173 L 111.001,182.173 L 110.911,182.118 L 111.001,182.173 L 110.932,182.173 L 110.911,182.118z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 109.861 179.928 L 110.049,179.921 L 111.092,182.013 L 110.911,182.118 L 109.868,180.011 L 109.861,179.928 L 109.868,180.011 L 109.847,179.969 L 109.861,179.928z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 110.689 177.64 L 110.675,177.682 L 110.056,179.99 L 109.861,179.928 L 110.48,177.619 L 110.689,177.64 L 110.689,177.64 L 110.689,177.654 L 110.675,177.682 L 110.689,177.64z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 110.271 175.512 L 110.48,175.533 L 110.689,177.64 L 110.48,177.661 L 110.271,175.554 L 110.271,175.512 L 110.271,175.554 L 110.271,175.533 L 110.271,175.512z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 110.911 173.371 L 111.106,173.454 L 110.473,175.575 L 110.271,175.512 L 110.904,173.406 L 110.911,173.371 L 110.904,173.406 L 110.911,173.392 L 110.911,173.371z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 112.232 171.438 L 112.35,171.605 L 111.085,173.489 L 110.911,173.371 L 112.176,171.48 L 112.232,171.438 L 112.176,171.48 L 112.19,171.445 L 112.232,171.438z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 114.151 170.792 L 114.172,171.007 L 112.295,171.647 L 112.232,171.438 L 114.109,170.798 L 114.151,170.792 L 114.109,170.798 L 114.123,170.792 L 114.151,170.792z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 117.106 171.014 L 117.057,171.223 L 114.13,171.007 L 114.151,170.792 L 117.064,171.014 L 117.106,171.014 L 117.064,171.014 L 117.092,171.014 L 117.106,171.014z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 113.539 178.488 L 112.601,178.224 L 112.76,178.377 L 113.47,178.141 L 113.539,178.488z"/> + <path style="fill: #f7efd3; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 109.458 194.306 L 109.541,191.128 L 110.369,187.332 L 111.627,185.01 L 113.511,183.536 L 113.094,185.441 L 113.929,187.124 L 116.23,186.06 L 117.064,184.808 L 117.697,183.536 L 121.236,185.65 L 119.15,190.489 L 118.239,194.097 L 109.458,194.306z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 109.437 191.094 L 109.646,191.135 L 109.562,194.313 L 109.354,194.306 L 109.437,191.128 L 109.437,191.094 L 109.437,191.128 L 109.437,191.115 L 109.437,191.094z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 110.285 187.291 L 110.473,187.353 L 109.632,191.142 L 109.437,191.094 L 110.271,187.311 L 110.285,187.291 L 110.271,187.311 L 110.271,187.297 L 110.285,187.291z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 111.565 184.927 L 111.718,185.073 L 110.459,187.381 L 110.285,187.291 L 111.537,184.961 L 111.565,184.927 L 111.537,184.961 L 111.544,184.947 L 111.565,184.927z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 113.616 183.571 L 113.574,183.619 L 111.69,185.093 L 111.565,184.927 L 113.449,183.453 L 113.616,183.571 L 113.449,183.453 L 113.671,183.279 L 113.616,183.571z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 112.997 185.483 L 112.99,185.42 L 113.414,183.529 L 113.616,183.571 L 113.192,185.469 L 112.997,185.483 L 112.997,185.483 L 112.99,185.448 L 112.99,185.42 L 112.997,185.483z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 113.97 187.221 L 113.831,187.172 L 112.997,185.483 L 113.192,185.392 L 114.019,187.075 L 113.97,187.221 L 113.97,187.221 L 113.88,187.263 L 113.831,187.172 L 113.97,187.221z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 116.313 186.129 L 116.272,186.171 L 113.97,187.221 L 113.887,187.033 L 116.188,185.969 L 116.313,186.129 L 116.313,186.129 L 116.299,186.157 L 116.272,186.171 L 116.313,186.129z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 117.148 184.857 L 117.148,184.871 L 116.313,186.129 L 116.139,186.011 L 116.974,184.746 L 117.148,184.857 L 117.148,184.857 L 117.148,184.864 L 117.148,184.871 L 117.148,184.857z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 117.753 183.446 L 117.787,183.592 L 117.148,184.857 L 116.967,184.753 L 117.6,183.494 L 117.753,183.446 L 117.6,183.494 L 117.648,183.397 L 117.753,183.446z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 121.34 185.691 L 121.187,185.74 L 117.641,183.626 L 117.753,183.446 L 121.298,185.559 L 121.34,185.691 L 121.298,185.559 L 121.375,185.608 L 121.34,185.691z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 119.053 190.468 L 119.06,190.447 L 121.145,185.608 L 121.34,185.691 L 119.254,190.531 L 119.053,190.468 L 119.053,190.468 L 119.06,190.461 L 119.06,190.447 L 119.053,190.468z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 118.142 194.083 L 119.053,190.468 L 119.261,190.517 L 118.344,194.132 L 118.142,194.083z"/> + <path style="fill: #e9c292; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 111.453 193.291 L 111.836,189.439 L 112.309,187.172 L 112.719,185.114 L 113.511,183.536 L 110.237,184.808 L 109.131,185.886 L 108.568,190.371 L 108.429,193.631 L 111.453,193.291z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 111.745 189.418 L 111.947,189.446 L 111.558,193.298 L 111.349,193.27 L 111.738,189.432 L 111.745,189.418 L 111.738,189.432 L 111.738,189.425 L 111.745,189.418z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 112.197 187.158 L 112.413,187.2 L 111.947,189.46 L 111.745,189.418 L 112.197,187.158 L 112.197,187.158 L 112.413,187.2 L 112.413,187.2 L 112.413,187.2 L 112.197,187.158z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 112.628 185.073 L 112.83,185.135 L 112.413,187.2 L 112.197,187.158 L 112.628,185.093 L 112.628,185.073 L 112.628,185.093 L 112.628,185.086 L 112.628,185.073z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 113.477 183.439 L 113.602,183.592 L 112.823,185.163 L 112.628,185.073 L 113.414,183.494 L 113.477,183.439 L 113.477,183.439 L 113.713,183.355 L 113.602,183.592 L 113.477,183.439z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 110.174 184.732 L 110.209,184.704 L 113.477,183.439 L 113.553,183.647 L 110.285,184.906 L 110.174,184.732 L 110.174,184.732 L 110.188,184.704 L 110.209,184.704 L 110.174,184.732z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 109.034 185.879 L 109.062,185.817 L 110.174,184.732 L 110.313,184.878 L 109.208,185.969 L 109.034,185.879 L 109.034,185.879 L 109.034,185.851 L 109.062,185.817 L 109.034,185.879z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 108.471 190.371 L 108.471,190.35 L 109.034,185.879 L 109.235,185.907 L 108.672,190.385 L 108.471,190.371 L 108.471,190.371 L 108.471,190.357 L 108.471,190.35 L 108.471,190.371z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 108.325 193.631 L 108.471,190.371 L 108.672,190.378 L 108.533,193.638 L 108.325,193.631z"/> + <path style="fill: #e9c292; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 125.06 191.858 L 123.753,185.441 L 118.316,183.334 L 116.432,187.965 L 115.597,191.963 L 115.194,193.784 L 125.06,191.858z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 123.788 185.344 L 123.857,185.42 L 125.164,191.831 L 124.956,191.879 L 123.655,185.462 L 123.788,185.344 L 123.788,185.344 L 123.843,185.358 L 123.857,185.42 L 123.788,185.344z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 118.225 183.3 L 118.357,183.23 L 123.788,185.344 L 123.711,185.531 L 118.281,183.432 L 118.225,183.3 L 118.225,183.3 L 118.26,183.202 L 118.357,183.23 L 118.225,183.3z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 116.334 187.951 L 116.341,187.916 L 118.225,183.3 L 118.42,183.376 L 116.529,188.007 L 116.334,187.951 L 116.334,187.951 L 116.334,187.937 L 116.341,187.916 L 116.334,187.951z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 115.701 191.991 L 115.5,191.949 L 116.334,187.951 L 116.536,187.993 L 115.701,191.991 L 115.701,191.991 L 115.701,191.991 L 115.701,191.991 L 115.701,191.991z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 115.09 193.75 L 115.5,191.942 L 115.701,191.991 L 115.298,193.805 L 115.09,193.75z"/> + <path style="fill: #e9c292; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 126.882 193.437 L 125.428,188.813 L 123.753,185.441 L 121.667,185.441 L 120.408,187.749 L 120.193,190.287 L 122.494,193.652 L 126.882,193.437z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 126.986 193.416 L 127.014,193.506 L 126.826,193.569 L 126.784,193.472 L 126.986,193.416z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 125.519 188.765 L 125.526,188.778 L 126.986,193.416 L 126.784,193.472 L 125.317,188.834 L 125.519,188.765z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 123.753 185.337 L 123.843,185.392 L 125.519,188.765 L 125.331,188.855 L 123.662,185.483 L 123.753,185.337z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 121.57 185.385 L 121.667,185.337 L 123.753,185.337 L 123.753,185.552 L 121.667,185.552 L 121.57,185.385z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 120.304 187.742 L 120.318,187.701 L 121.57,185.385 L 121.75,185.483 L 120.499,187.798 L 120.304,187.742z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 120.103 190.343 L 120.096,190.266 L 120.304,187.742 L 120.513,187.763 L 120.304,190.294 L 120.103,190.343z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 122.411 193.708 L 120.103,190.343 L 120.276,190.225 L 122.585,193.597 L 122.411,193.708z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 122.585 193.597 L 122.64,193.68 L 122.467,193.791 L 122.411,193.708 L 122.585,193.597z"/> + <path style="fill: #028444; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 110.716 189.307 L 110.014,189.696 L 109.256,189.613 L 108.832,189.46 L 109.277,189.119 L 109.778,188.855 L 110.369,188.904 L 110.716,189.307z"/> + <path style="fill: #028444; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 110.946 191.052 L 110.89,191.142 L 110.709,191.052 L 110.751,190.962 L 110.946,191.052z"/> + <path style="fill: #028444; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 111.231 190.461 L 111.231,190.482 L 110.946,191.052 L 110.751,190.962 L 111.036,190.385 L 111.231,190.461z"/> + <path style="fill: #028444; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 111.273 190.197 L 111.279,190.252 L 111.231,190.461 L 111.022,190.405 L 111.064,190.204 L 111.273,190.197z"/> + <path style="fill: #028444; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 111.085 189.703 L 111.092,189.71 L 111.273,190.197 L 111.078,190.266 L 110.904,189.787 L 111.085,189.703z"/> + <path style="fill: #028444; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 110.709 189.008 L 110.73,189.043 L 111.085,189.703 L 110.904,189.807 L 110.542,189.133 L 110.709,189.008z"/> + <path style="fill: #028444; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 110.39 188.744 L 110.709,189.008 L 110.57,189.168 L 110.257,188.904 L 110.39,188.744z"/> + <path style="fill: #028444; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 110.257 188.904 L 110.181,188.834 L 110.313,188.681 L 110.39,188.744 L 110.257,188.904z"/> + <path style="fill: #028444; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 110.035 190.134 L 110.035,189.953 L 110.737,189.564 L 110.835,189.745 L 110.132,190.134 L 110.035,190.134z"/> + <path style="fill: #028444; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 109.284 189.522 L 109.305,189.529 L 110.125,189.953 L 110.035,190.134 L 109.208,189.703 L 109.284,189.522z"/> + <path style="fill: #028444; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 108.776 189.376 L 108.874,189.355 L 109.284,189.522 L 109.221,189.71 L 108.797,189.557 L 108.776,189.376z"/> + <path style="fill: #028444; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 109.235 189.015 L 109.347,189.189 L 108.895,189.536 L 108.776,189.376 L 109.221,189.036 L 109.235,189.015z"/> + <path style="fill: #028444; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 109.792 188.744 L 109.826,188.945 L 109.326,189.209 L 109.235,189.015 L 109.729,188.765 L 109.792,188.744z"/> + <path style="fill: #028444; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 110.459 188.834 L 110.369,189.008 L 109.764,188.959 L 109.792,188.744 L 110.39,188.806 L 110.459,188.834z"/> + <path style="fill: #028444; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 110.821 189.272 L 110.633,189.362 L 110.299,188.98 L 110.459,188.834 L 110.793,189.23 L 110.821,189.272z"/> + <path style="fill: #028444; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 110.835 189.745 L 110.675,189.661 L 110.612,189.314 L 110.821,189.272 L 110.89,189.62 L 110.835,189.745z"/> + <path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 110.39 187.145 L 110.675,187.416 L 110.661,187.944 L 111.231,187.596 L 111.676,187.749 L 111.585,188.222 L 111.127,188.389 L 111.516,188.598 L 111.516,189.015 L 110.835,189.14 L 110.633,188.911 L 110.709,189.272 L 110.341,189.439 L 110.111,189.223 L 110.132,188.883 L 109.687,189.015 L 109.326,188.911 L 109.298,188.514 L 109.555,188.354 L 109.715,188.222 L 109.534,187.965 L 109.402,187.617 L 109.792,187.464 L 110.056,187.729 L 110.084,187.277 L 110.39,187.145z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 113.31 176.924 L 112.99,176.34 L 112.322,176.34 L 112.413,176.66 L 112.364,176.882 L 112.934,176.931 L 112.99,176.618 L 113.31,176.924z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 115.409 177.035 L 115.013,176.444 L 114.207,176.437 L 114.311,176.771 L 114.248,176.993 L 114.951,177.042 L 115.02,176.729 L 115.409,177.035z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 115.861 176.173 L 115.18,175.791 L 114.367,175.7 L 114.061,175.77 L 114.186,175.909 L 114.554,175.957 L 115.055,175.916 L 115.861,176.173z"/> + <path style="fill: #131516; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 113.094 175.784 L 112.573,175.617 L 112.107,175.881 L 112.628,175.832 L 113.15,175.992 L 113.094,175.784z"/> + <path style="fill: #b6b79e; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 105.676 194.605 L 129.92,194.605 L 129.92,192.067 L 105.676,192.067 L 105.676,194.605z"/> + <path style="fill: #c8c9b6; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 109.34 168.539 L 135.837,168.539 L 135.837,168.97 L 109.34,168.97 L 109.34,168.539z"/> + <path style="fill: #c8c9b6; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 106.002 171.904 L 106.002,171.821 L 106.009,171.73 L 106.009,171.647 L 106.023,171.563 L 106.023,171.473 L 106.037,171.396 L 106.051,171.313 L 106.065,171.223 L 106.086,171.139 L 106.114,171.056 L 106.134,170.979 L 106.155,170.91 L 106.19,170.833 L 106.211,170.75 L 106.239,170.666 L 106.273,170.59 L 106.301,170.527 L 106.329,170.444 L 106.371,170.367 L 106.413,170.305 L 106.447,170.228 L 106.489,170.166 L 106.531,170.096 L 106.579,170.034 L 106.628,169.957 L 106.67,169.888 L 106.718,169.832 L 106.76,169.763 L 106.823,169.707 L 106.871,169.651 L 106.927,169.582 L 106.983,169.533 L 107.038,169.477 L 107.101,169.415 L 107.156,169.359 L 107.226,169.318 L 107.282,169.269 L 107.351,169.213 L 107.414,169.172 L 107.476,169.123 L 107.546,169.067 L 107.615,169.026 L 107.678,168.991 L 107.754,168.956 L 107.824,168.914 L 107.893,168.88 L 107.963,168.838 L 108.039,168.803 L 108.109,168.775 L 108.192,168.754 L 108.276,168.72 L 108.352,168.699 L 108.429,168.671 L 108.512,168.65 L 108.589,168.629 L 108.672,168.615 L 108.756,168.601 L 108.832,168.581 L 108.916,168.574 L 108.999,168.56 L 109.082,168.56 L 109.166,168.546 L 109.242,168.546 L 109.34,168.539 L 109.34,168.97 L 109.263,168.97 L 109.194,168.97 L 109.11,168.977 L 109.034,168.977 L 108.964,168.991 L 108.895,169.005 L 108.825,169.012 L 108.756,169.019 L 108.672,169.046 L 108.61,169.053 L 108.54,169.081 L 108.471,169.102 L 108.401,169.123 L 108.338,169.144 L 108.276,169.172 L 108.199,169.192 L 108.144,169.227 L 108.067,169.255 L 108.012,169.283 L 107.949,169.318 L 107.887,169.359 L 107.831,169.394 L 107.761,169.436 L 107.713,169.471 L 107.65,169.512 L 107.588,169.547 L 107.539,169.589 L 107.483,169.644 L 107.435,169.686 L 107.372,169.735 L 107.33,169.783 L 107.282,169.825 L 107.233,169.881 L 107.184,169.922 L 107.136,169.978 L 107.087,170.041 L 107.045,170.096 L 107.004,170.145 L 106.962,170.208 L 106.92,170.263 L 106.878,170.319 L 106.851,170.381 L 106.809,170.444 L 106.781,170.5 L 106.746,170.569 L 106.712,170.625 L 106.677,170.701 L 106.656,170.757 L 106.635,170.826 L 106.6,170.889 L 106.579,170.965 L 106.545,171.021 L 106.538,171.097 L 106.517,171.174 L 106.503,171.237 L 106.482,171.313 L 106.475,171.389 L 106.461,171.452 L 106.447,171.529 L 106.44,171.605 L 106.433,171.675 L 106.433,171.751 L 106.433,171.828 L 106.433,171.904 L 106.002,171.904z"/> + <path style="fill: #c8c9b6; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 106.002 188.771 L 106.002,171.904 L 106.433,171.904 L 106.433,188.771 L 106.002,188.771z"/> + <path style="fill: #c8c9b6; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 109.34 192.137 L 109.242,192.13 L 109.166,192.13 L 109.082,192.123 L 108.999,192.116 L 108.916,192.109 L 108.832,192.088 L 108.756,192.081 L 108.672,192.067 L 108.589,192.046 L 108.512,192.025 L 108.429,192.005 L 108.352,191.984 L 108.276,191.956 L 108.192,191.921 L 108.109,191.9 L 108.039,191.865 L 107.963,191.831 L 107.893,191.796 L 107.824,191.768 L 107.754,191.726 L 107.678,191.685 L 107.615,191.643 L 107.546,191.601 L 107.476,191.56 L 107.414,191.518 L 107.351,191.469 L 107.282,191.42 L 107.226,191.358 L 107.156,191.309 L 107.101,191.261 L 107.038,191.205 L 106.983,191.142 L 106.927,191.094 L 106.871,191.031 L 106.823,190.962 L 106.76,190.913 L 106.718,190.85 L 106.67,190.788 L 106.628,190.718 L 106.579,190.656 L 106.531,190.579 L 106.489,190.517 L 106.447,190.44 L 106.413,190.378 L 106.371,190.301 L 106.329,190.225 L 106.301,190.162 L 106.273,190.079 L 106.239,190.002 L 106.211,189.926 L 106.19,189.856 L 106.155,189.78 L 106.134,189.696 L 106.114,189.613 L 106.086,189.529 L 106.065,189.446 L 106.051,189.362 L 106.037,189.286 L 106.023,189.203 L 106.023,189.119 L 106.009,189.036 L 106.009,188.945 L 106.002,188.862 L 106.002,188.771 L 106.433,188.771 L 106.433,188.855 L 106.433,188.924 L 106.433,189.001 L 106.44,189.077 L 106.447,189.14 L 106.461,189.223 L 106.475,189.3 L 106.482,189.355 L 106.503,189.439 L 106.517,189.515 L 106.538,189.571 L 106.545,189.654 L 106.579,189.71 L 106.6,189.787 L 106.635,189.856 L 106.656,189.919 L 106.677,189.988 L 106.712,190.044 L 106.746,190.113 L 106.781,190.176 L 106.809,190.232 L 106.851,190.294 L 106.878,190.35 L 106.92,190.419 L 106.962,190.475 L 107.004,190.524 L 107.045,190.579 L 107.087,190.642 L 107.136,190.697 L 107.184,190.746 L 107.233,190.795 L 107.282,190.85 L 107.33,190.906 L 107.372,190.948 L 107.435,190.996 L 107.483,191.045 L 107.539,191.087 L 107.588,191.135 L 107.65,191.17 L 107.713,191.212 L 107.761,191.254 L 107.831,191.288 L 107.887,191.316 L 107.949,191.351 L 108.012,191.393 L 108.067,191.427 L 108.144,191.448 L 108.199,191.483 L 108.276,191.511 L 108.338,191.525 L 108.401,191.56 L 108.471,191.573 L 108.54,191.601 L 108.61,191.615 L 108.672,191.636 L 108.756,191.65 L 108.825,191.657 L 108.895,191.678 L 108.964,191.685 L 109.034,191.699 L 109.11,191.699 L 109.194,191.706 L 109.263,191.706 L 109.34,191.706 L 109.34,192.137z"/> + <path style="fill: #c8c9b6; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 135.837 192.137 L 109.34,192.137 L 109.34,191.706 L 135.837,191.706 L 135.837,192.137z"/> + <path style="fill: #c8c9b6; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 139.174 188.771 L 139.174,188.862 L 139.167,188.945 L 139.16,189.036 L 139.153,189.119 L 139.139,189.203 L 139.132,189.286 L 139.118,189.362 L 139.105,189.446 L 139.084,189.529 L 139.063,189.613 L 139.049,189.696 L 139.021,189.78 L 138.993,189.849 L 138.965,189.926 L 138.945,190.002 L 138.91,190.079 L 138.875,190.162 L 138.847,190.225 L 138.813,190.301 L 138.771,190.378 L 138.729,190.44 L 138.687,190.517 L 138.646,190.579 L 138.604,190.656 L 138.555,190.718 L 138.507,190.788 L 138.465,190.85 L 138.416,190.913 L 138.361,190.962 L 138.305,191.031 L 138.256,191.094 L 138.201,191.142 L 138.138,191.205 L 138.082,191.261 L 138.02,191.309 L 137.964,191.358 L 137.902,191.42 L 137.832,191.469 L 137.777,191.518 L 137.7,191.56 L 137.638,191.601 L 137.568,191.643 L 137.505,191.685 L 137.429,191.726 L 137.359,191.768 L 137.29,191.796 L 137.213,191.831 L 137.137,191.865 L 137.053,191.9 L 136.984,191.921 L 136.907,191.956 L 136.831,191.984 L 136.748,192.005 L 136.671,192.025 L 136.595,192.046 L 136.511,192.067 L 136.428,192.081 L 136.344,192.088 L 136.268,192.109 L 136.184,192.116 L 136.101,192.123 L 136.011,192.13 L 135.927,192.13 L 135.837,192.137 L 135.837,191.706 L 135.92,191.706 L 135.99,191.706 L 136.066,191.699 L 136.143,191.699 L 136.219,191.685 L 136.289,191.678 L 136.358,191.657 L 136.428,191.65 L 136.504,191.636 L 136.574,191.615 L 136.643,191.601 L 136.706,191.573 L 136.782,191.56 L 136.845,191.525 L 136.907,191.511 L 136.977,191.483 L 137.04,191.448 L 137.095,191.427 L 137.172,191.393 L 137.227,191.351 L 137.297,191.316 L 137.352,191.288 L 137.415,191.254 L 137.471,191.212 L 137.533,191.17 L 137.575,191.135 L 137.638,191.087 L 137.7,191.045 L 137.749,190.996 L 137.79,190.948 L 137.853,190.906 L 137.902,190.85 L 137.95,190.795 L 137.999,190.746 L 138.048,190.697 L 138.089,190.642 L 138.138,190.579 L 138.18,190.524 L 138.222,190.475 L 138.256,190.419 L 138.298,190.35 L 138.333,190.294 L 138.375,190.232 L 138.402,190.176 L 138.437,190.113 L 138.465,190.044 L 138.5,189.988 L 138.527,189.919 L 138.548,189.856 L 138.583,189.787 L 138.604,189.71 L 138.618,189.654 L 138.646,189.571 L 138.66,189.515 L 138.68,189.439 L 138.694,189.355 L 138.708,189.3 L 138.722,189.223 L 138.736,189.14 L 138.743,189.077 L 138.743,189.001 L 138.75,188.924 L 138.75,188.855 L 138.75,188.771 L 139.174,188.771z"/> + <path style="fill: #c8c9b6; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 139.174 171.904 L 139.174,188.771 L 138.75,188.771 L 138.75,171.904 L 139.174,171.904z"/> + <path style="fill: #c8c9b6; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 135.837 168.539 L 135.927,168.546 L 136.011,168.546 L 136.101,168.56 L 136.184,168.56 L 136.268,168.574 L 136.344,168.581 L 136.428,168.601 L 136.511,168.615 L 136.595,168.629 L 136.671,168.65 L 136.748,168.671 L 136.831,168.699 L 136.907,168.72 L 136.984,168.754 L 137.053,168.775 L 137.137,168.803 L 137.213,168.838 L 137.29,168.88 L 137.359,168.914 L 137.429,168.956 L 137.505,168.991 L 137.568,169.026 L 137.638,169.067 L 137.7,169.123 L 137.777,169.172 L 137.832,169.213 L 137.902,169.269 L 137.964,169.318 L 138.02,169.359 L 138.082,169.415 L 138.138,169.477 L 138.201,169.533 L 138.256,169.582 L 138.305,169.651 L 138.361,169.707 L 138.416,169.763 L 138.465,169.832 L 138.507,169.888 L 138.555,169.957 L 138.604,170.034 L 138.646,170.096 L 138.687,170.166 L 138.729,170.228 L 138.771,170.305 L 138.813,170.367 L 138.847,170.444 L 138.875,170.527 L 138.91,170.59 L 138.945,170.666 L 138.965,170.75 L 138.993,170.833 L 139.021,170.91 L 139.049,170.979 L 139.063,171.056 L 139.084,171.139 L 139.105,171.223 L 139.118,171.306 L 139.132,171.396 L 139.139,171.473 L 139.153,171.563 L 139.16,171.647 L 139.167,171.73 L 139.174,171.821 L 139.174,171.904 L 138.75,171.904 L 138.75,171.828 L 138.75,171.751 L 138.743,171.675 L 138.743,171.605 L 138.736,171.529 L 138.722,171.452 L 138.708,171.389 L 138.694,171.313 L 138.68,171.237 L 138.66,171.174 L 138.646,171.097 L 138.618,171.021 L 138.604,170.965 L 138.583,170.889 L 138.548,170.826 L 138.527,170.757 L 138.5,170.701 L 138.465,170.625 L 138.437,170.569 L 138.402,170.5 L 138.375,170.444 L 138.333,170.381 L 138.298,170.319 L 138.256,170.263 L 138.222,170.208 L 138.18,170.145 L 138.138,170.096 L 138.089,170.041 L 138.048,169.978 L 137.999,169.922 L 137.95,169.881 L 137.902,169.825 L 137.853,169.783 L 137.79,169.735 L 137.749,169.686 L 137.7,169.644 L 137.638,169.589 L 137.575,169.547 L 137.533,169.512 L 137.471,169.471 L 137.415,169.436 L 137.352,169.394 L 137.297,169.359 L 137.227,169.318 L 137.172,169.283 L 137.095,169.255 L 137.04,169.227 L 136.977,169.192 L 136.914,169.172 L 136.845,169.144 L 136.782,169.123 L 136.706,169.102 L 136.643,169.081 L 136.574,169.053 L 136.504,169.046 L 136.428,169.019 L 136.358,169.012 L 136.289,169.005 L 136.219,168.991 L 136.143,168.977 L 136.066,168.977 L 135.99,168.97 L 135.92,168.97 L 135.837,168.97 L 135.837,168.539z"/> + </g> + <text font-size="12.2372" style="fill: #000000; fill-opacity: 1; stroke: none;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" x="259.248" y="243.758"> + <tspan x="259.248" y="243.758">Client (libclient)</tspan> + </text> + <g> + <path style="fill: #c8c9b6; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 147.978 186.977 L 148.015,186.947 L 148.054,186.91 L 148.088,186.877 L 148.127,186.844 L 148.166,186.816 L 148.206,186.786 L 148.245,186.759 L 148.282,186.725 L 148.327,186.704 L 148.366,186.674 L 148.409,186.65 L 148.454,186.628 L 148.494,186.601 L 148.539,186.58 L 148.585,186.559 L 148.63,186.541 L 148.679,186.519 L 148.727,186.501 L 148.776,186.486 L 148.821,186.474 L 148.87,186.459 L 148.915,186.447 L 148.963,186.431 L 149.012,186.419 L 149.067,186.41 L 149.112,186.401 L 149.167,186.401 L 149.218,186.389 L 149.267,186.386 L 149.321,186.383 L 149.373,186.383 L 149.43,186.383 L 170.485,186.383 L 170.588,186.383 L 170.688,186.389 L 170.785,186.401 L 170.879,186.419 L 170.969,186.438 L 171.054,186.459 L 171.139,186.492 L 171.221,186.519 L 171.3,186.553 L 171.376,186.592 L 171.448,186.631 L 171.518,186.683 L 171.591,186.725 L 171.657,186.777 L 171.721,186.825 L 171.782,186.883 L 171.848,186.938 L 171.906,186.998 L 171.97,187.056 L 172.03,187.119 L 172.151,187.25 L 172.273,187.377 L 172.391,187.51 L 172.512,187.65 L 172.576,187.72 L 172.636,187.783 L 172.703,187.847 L 172.767,187.917 L 175.852,191.232 L 151.33,191.469 L 147.978,186.977z"/> + <path style="fill: #4e503e; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 149.43 186.459 L 149.379,186.459 L 149.324,186.459 L 149.27,186.462 L 149.227,186.468 L 149.176,186.474 L 149.127,186.48 L 149.079,186.486 L 149.03,186.495 L 148.979,186.507 L 148.936,186.516 L 148.888,186.531 L 148.845,186.55 L 148.794,186.559 L 148.754,186.577 L 148.709,186.592 L 148.66,186.61 L 148.618,186.628 L 148.576,186.65 L 148.53,186.671 L 148.491,186.692 L 148.448,186.713 L 148.406,186.741 L 148.366,186.765 L 148.327,186.795 L 148.285,186.816 L 148.245,186.844 L 148.209,186.874 L 148.175,186.904 L 148.133,186.935 L 148.103,186.968 L 148.066,186.998 L 148.036,187.029 L 147.93,186.928 L 147.96,186.886 L 148,186.856 L 148.039,186.822 L 148.075,186.786 L 148.121,186.753 L 148.157,186.725 L 148.197,186.692 L 148.242,186.668 L 148.282,186.638 L 148.327,186.61 L 148.376,186.583 L 148.415,186.559 L 148.463,186.538 L 148.509,186.516 L 148.554,186.495 L 148.6,186.468 L 148.654,186.45 L 148.7,186.431 L 148.748,186.419 L 148.797,186.401 L 148.848,186.386 L 148.897,186.371 L 148.945,186.362 L 149,186.347 L 149.051,186.341 L 149.106,186.325 L 149.154,186.322 L 149.209,186.316 L 149.267,186.307 L 149.318,186.307 L 149.373,186.307 L 149.43,186.307 L 149.43,186.459z"/> + <path style="fill: #4e503e; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 170.485 186.459 L 149.43,186.459 L 149.43,186.307 L 170.485,186.307 L 170.485,186.459z"/> + <path style="fill: #4e503e; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 172.715 187.974 L 172.648,187.904 L 172.585,187.838 L 172.518,187.765 L 172.455,187.695 L 172.333,187.562 L 172.215,187.429 L 172.094,187.298 L 171.979,187.177 L 171.915,187.113 L 171.854,187.053 L 171.794,186.995 L 171.733,186.938 L 171.673,186.886 L 171.609,186.838 L 171.542,186.786 L 171.479,186.741 L 171.409,186.704 L 171.339,186.659 L 171.306,186.644 L 171.266,186.625 L 171.23,186.61 L 171.191,186.589 L 171.148,186.577 L 171.115,186.559 L 171.073,186.55 L 171.03,186.535 L 170.994,186.519 L 170.948,186.513 L 170.909,186.501 L 170.863,186.495 L 170.818,186.48 L 170.775,186.477 L 170.727,186.468 L 170.685,186.462 L 170.636,186.459 L 170.585,186.459 L 170.536,186.459 L 170.485,186.459 L 170.485,186.307 L 170.542,186.307 L 170.594,186.307 L 170.645,186.307 L 170.694,186.316 L 170.745,186.316 L 170.797,186.325 L 170.845,186.334 L 170.894,186.344 L 170.939,186.35 L 170.988,186.365 L 171.03,186.371 L 171.079,186.386 L 171.121,186.401 L 171.166,186.419 L 171.209,186.431 L 171.248,186.45 L 171.291,186.468 L 171.33,186.486 L 171.37,186.507 L 171.412,186.531 L 171.488,186.571 L 171.56,186.613 L 171.633,186.665 L 171.703,186.713 L 171.764,186.771 L 171.83,186.822 L 171.894,186.883 L 171.961,186.947 L 172.024,187.007 L 172.085,187.068 L 172.206,187.195 L 172.327,187.329 L 172.445,187.462 L 172.567,187.598 L 172.633,187.662 L 172.694,187.732 L 172.758,187.795 L 172.824,187.865 L 172.715,187.974z"/> + <path style="fill: #4e503e; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 175.852 191.308 L 175.794,191.281 L 172.715,187.971 L 172.824,187.865 L 175.91,191.178 L 175.852,191.308 L 175.91,191.178 L 176.022,191.308 L 175.852,191.308z"/> + <path style="fill: #4e503e; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 151.33 191.393 L 175.852,191.156 L 175.852,191.308 L 151.33,191.544 L 151.33,191.393z"/> + <path style="fill: #7b7c5c; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 147.978 186.977 L 147.942,187.013 L 147.912,187.047 L 147.881,187.086 L 147.848,187.125 L 147.812,187.159 L 147.791,187.198 L 147.76,187.241 L 147.733,187.28 L 147.703,187.319 L 147.675,187.365 L 147.651,187.407 L 147.63,187.45 L 147.6,187.492 L 147.581,187.538 L 147.563,187.583 L 147.542,187.632 L 147.521,187.674 L 147.506,187.72 L 147.484,187.765 L 147.469,187.813 L 147.46,187.865 L 147.448,187.917 L 147.43,187.962 L 147.421,188.013 L 147.412,188.059 L 147.403,188.114 L 147.4,188.165 L 147.391,188.22 L 147.387,188.268 L 147.381,188.32 L 147.381,188.371 L 147.381,188.426 L 147.381,192.617 L 151.652,198.566 L 151.767,191.29 L 147.978,186.977z"/> + <path style="fill: #4e503e; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 147.3 188.426 L 147.3,188.371 L 147.309,188.317 L 147.309,188.259 L 147.318,188.207 L 147.318,188.159 L 147.327,188.098 L 147.336,188.05 L 147.348,187.995 L 147.357,187.944 L 147.372,187.898 L 147.387,187.844 L 147.4,187.792 L 147.418,187.747 L 147.43,187.695 L 147.448,187.65 L 147.469,187.598 L 147.494,187.556 L 147.515,187.507 L 147.539,187.462 L 147.56,187.41 L 147.581,187.368 L 147.612,187.329 L 147.639,187.28 L 147.669,187.238 L 147.694,187.195 L 147.724,187.159 L 147.76,187.119 L 147.791,187.074 L 147.824,187.035 L 147.854,186.998 L 147.888,186.962 L 147.93,186.928 L 148.036,187.035 L 148,187.065 L 147.963,187.101 L 147.936,187.138 L 147.903,187.177 L 147.875,187.207 L 147.848,187.25 L 147.821,187.289 L 147.791,187.329 L 147.769,187.365 L 147.742,187.404 L 147.721,187.447 L 147.694,187.483 L 147.672,187.529 L 147.651,187.574 L 147.63,187.613 L 147.612,187.659 L 147.594,187.704 L 147.578,187.75 L 147.56,187.792 L 147.545,187.841 L 147.527,187.883 L 147.515,187.935 L 147.506,187.977 L 147.494,188.029 L 147.484,188.074 L 147.481,188.126 L 147.469,188.174 L 147.469,188.226 L 147.463,188.274 L 147.46,188.32 L 147.46,188.371 L 147.451,188.426 L 147.3,188.426z"/> + <path style="fill: #4e503e; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 147.318 192.663 L 147.3,192.617 L 147.3,188.426 L 147.451,188.426 L 147.451,192.617 L 147.318,192.663 L 147.318,192.663 L 147.3,192.641 L 147.3,192.617 L 147.318,192.663z"/> + <path style="fill: #4e503e; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 151.724 198.569 L 151.588,198.609 L 147.318,192.663 L 147.442,192.578 L 151.712,198.524 L 151.724,198.569 L 151.724,198.569 L 151.721,198.797 L 151.588,198.609 L 151.724,198.569z"/> + <path style="fill: #4e503e; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 151.843 191.293 L 151.724,198.569 L 151.573,198.566 L 151.691,191.29 L 151.843,191.293z"/> + <path style="fill: #b6b79e; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 150.936 196.878 L 150.936,196.981 L 150.949,197.087 L 150.961,197.19 L 150.979,197.294 L 151,197.387 L 151.03,197.487 L 151.061,197.584 L 151.1,197.675 L 151.14,197.766 L 151.188,197.851 L 151.236,197.939 L 151.288,198.021 L 151.343,198.106 L 151.403,198.175 L 151.467,198.257 L 151.54,198.324 L 151.609,198.394 L 151.685,198.457 L 151.761,198.515 L 151.843,198.579 L 151.921,198.627 L 152.012,198.676 L 152.097,198.721 L 152.185,198.76 L 152.282,198.8 L 152.376,198.83 L 152.47,198.857 L 152.573,198.885 L 152.67,198.903 L 152.773,198.912 L 152.879,198.924 L 152.982,198.924 L 174.497,198.924 L 174.606,198.924 L 174.709,198.912 L 174.815,198.903 L 174.915,198.885 L 175.009,198.857 L 175.106,198.83 L 175.2,198.8 L 175.297,198.76 L 175.388,198.721 L 175.476,198.676 L 175.561,198.627 L 175.643,198.579 L 175.722,198.515 L 175.803,198.457 L 175.873,198.394 L 175.949,198.324 L 176.016,198.257 L 176.079,198.175 L 176.14,198.106 L 176.194,198.021 L 176.252,197.939 L 176.3,197.851 L 176.346,197.766 L 176.385,197.675 L 176.425,197.584 L 176.452,197.487 L 176.482,197.387 L 176.507,197.294 L 176.525,197.19 L 176.537,197.087 L 176.546,196.981 L 176.546,196.878 L 176.546,192.687 L 176.546,192.581 L 176.537,192.478 L 176.525,192.372 L 176.507,192.272 L 176.482,192.175 L 176.452,192.081 L 176.425,191.981 L 176.385,191.887 L 176.346,191.799 L 176.3,191.711 L 176.252,191.626 L 176.194,191.541 L 176.14,191.459 L 176.079,191.384 L 176.016,191.308 L 175.949,191.238 L 175.873,191.175 L 175.803,191.105 L 175.722,191.047 L 175.643,190.987 L 175.561,190.935 L 175.476,190.89 L 175.388,190.838 L 175.297,190.802 L 175.2,190.762 L 175.106,190.735 L 175.009,190.705 L 174.915,190.681 L 174.815,190.662 L 174.709,190.65 L 174.606,190.644 L 174.497,190.644 L 152.982,190.644 L 152.879,190.644 L 152.773,190.65 L 152.67,190.662 L 152.573,190.681 L 152.47,190.705 L 152.376,190.735 L 152.282,190.762 L 152.185,190.802 L 152.097,190.838 L 152.012,190.89 L 151.921,190.935 L 151.843,190.987 L 151.761,191.047 L 151.685,191.105 L 151.609,191.175 L 151.54,191.238 L 151.467,191.308 L 151.403,191.384 L 151.343,191.459 L 151.288,191.541 L 151.236,191.626 L 151.188,191.711 L 151.14,191.799 L 151.1,191.887 L 151.061,191.981 L 151.03,192.081 L 151,192.175 L 150.979,192.272 L 150.961,192.372 L 150.949,192.478 L 150.936,192.581 L 150.936,192.687 L 150.936,196.878z"/> + <path style="fill: #4e503e; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 152.982 199 L 152.982,199 L 152.931,199 L 152.876,198.997 L 152.825,198.997 L 152.767,198.988 L 152.715,198.982 L 152.658,198.979 L 152.609,198.963 L 152.555,198.96 L 152.506,198.942 L 152.452,198.933 L 152.403,198.921 L 152.352,198.903 L 152.3,198.888 L 152.255,198.87 L 152.206,198.851 L 152.155,198.836 L 152.115,198.812 L 152.067,198.791 L 152.021,198.769 L 151.973,198.748 L 151.931,198.718 L 151.882,198.694 L 151.843,198.666 L 151.8,198.639 L 151.752,198.609 L 151.712,198.582 L 151.676,198.548 L 151.634,198.515 L 151.594,198.479 L 151.555,198.448 L 151.521,198.415 L 151.485,198.375 L 151.446,198.342 L 151.409,198.303 L 151.379,198.266 L 151.349,198.23 L 151.312,198.185 L 151.282,198.145 L 151.252,198.109 L 151.227,198.066 L 151.197,198.021 L 151.17,197.978 L 151.143,197.936 L 151.118,197.891 L 151.097,197.842 L 151.067,197.797 L 151.049,197.751 L 151.027,197.709 L 151.009,197.654 L 150.988,197.606 L 150.973,197.557 L 150.955,197.509 L 150.936,197.46 L 150.927,197.406 L 150.915,197.357 L 150.906,197.309 L 150.891,197.254 L 150.885,197.203 L 150.879,197.148 L 150.87,197.094 L 150.867,197.045 L 150.867,196.99 L 150.858,196.936 L 150.858,196.878 L 151.012,196.878 L 151.012,196.933 L 151.018,196.981 L 151.021,197.03 L 151.021,197.081 L 151.03,197.13 L 151.036,197.178 L 151.046,197.233 L 151.049,197.275 L 151.067,197.327 L 151.076,197.372 L 151.085,197.418 L 151.106,197.463 L 151.118,197.509 L 151.136,197.557 L 151.152,197.6 L 151.17,197.645 L 151.188,197.691 L 151.209,197.73 L 151.23,197.775 L 151.252,197.821 L 151.273,197.86 L 151.297,197.9 L 151.327,197.939 L 151.352,197.978 L 151.379,198.018 L 151.403,198.054 L 151.433,198.094 L 151.464,198.13 L 151.494,198.169 L 151.521,198.203 L 151.561,198.239 L 151.594,198.266 L 151.624,198.303 L 151.661,198.336 L 151.691,198.369 L 151.731,198.397 L 151.767,198.43 L 151.806,198.457 L 151.846,198.488 L 151.882,198.509 L 151.921,198.539 L 151.964,198.563 L 152.006,198.588 L 152.046,198.609 L 152.091,198.63 L 152.131,198.657 L 152.173,198.676 L 152.215,198.694 L 152.258,198.712 L 152.306,198.73 L 152.352,198.748 L 152.394,198.757 L 152.446,198.776 L 152.494,198.791 L 152.543,198.797 L 152.585,198.809 L 152.637,198.818 L 152.685,198.824 L 152.734,198.83 L 152.785,198.836 L 152.831,198.845 L 152.885,198.845 L 152.931,198.848 L 152.982,198.848 L 152.982,198.848 L 152.982,199 L 152.982,199 L 152.982,199z"/> + <path style="fill: #4e503e; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 174.497 198.848 L 174.497,199 L 152.982,199 L 152.982,198.848 L 174.497,198.848 L 174.497,198.848 L 174.497,199 L 174.497,199 L 174.497,199 L 174.497,198.848z"/> + <path style="fill: #4e503e; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 176.622 196.878 L 176.622,196.878 L 176.622,196.936 L 176.622,196.99 L 176.622,197.045 L 176.613,197.094 L 176.604,197.148 L 176.604,197.203 L 176.591,197.254 L 176.582,197.309 L 176.567,197.357 L 176.558,197.406 L 176.543,197.46 L 176.528,197.509 L 176.513,197.557 L 176.494,197.606 L 176.476,197.657 L 176.461,197.709 L 176.437,197.751 L 176.416,197.797 L 176.391,197.842 L 176.367,197.891 L 176.343,197.936 L 176.316,197.978 L 176.291,198.021 L 176.261,198.066 L 176.234,198.109 L 176.203,198.145 L 176.173,198.185 L 176.14,198.23 L 176.103,198.266 L 176.073,198.303 L 176.04,198.342 L 175.997,198.375 L 175.964,198.415 L 175.922,198.448 L 175.888,198.479 L 175.852,198.515 L 175.81,198.548 L 175.77,198.582 L 175.731,198.609 L 175.688,198.639 L 175.643,198.666 L 175.6,198.694 L 175.558,198.718 L 175.509,198.748 L 175.467,198.769 L 175.419,198.791 L 175.376,198.812 L 175.328,198.836 L 175.279,198.851 L 175.228,198.87 L 175.179,198.888 L 175.128,198.903 L 175.079,198.921 L 175.028,198.933 L 174.979,198.942 L 174.928,198.96 L 174.879,198.963 L 174.825,198.979 L 174.773,198.982 L 174.718,198.988 L 174.664,198.997 L 174.612,198.997 L 174.555,199 L 174.497,199 L 174.497,198.848 L 174.552,198.848 L 174.603,198.845 L 174.652,198.845 L 174.703,198.836 L 174.749,198.83 L 174.803,198.824 L 174.849,198.818 L 174.897,198.809 L 174.949,198.797 L 174.994,198.791 L 175.037,198.776 L 175.085,198.757 L 175.131,198.748 L 175.176,198.73 L 175.219,198.712 L 175.267,198.694 L 175.309,198.676 L 175.352,198.657 L 175.397,198.63 L 175.437,198.609 L 175.479,198.588 L 175.522,198.563 L 175.561,198.539 L 175.6,198.509 L 175.637,198.488 L 175.679,198.457 L 175.719,198.43 L 175.752,198.397 L 175.788,198.369 L 175.828,198.336 L 175.861,198.303 L 175.891,198.275 L 175.922,198.239 L 175.961,198.203 L 175.991,198.169 L 176.022,198.13 L 176.052,198.094 L 176.079,198.054 L 176.11,198.018 L 176.134,197.978 L 176.161,197.939 L 176.185,197.9 L 176.21,197.86 L 176.234,197.821 L 176.255,197.775 L 176.276,197.73 L 176.3,197.691 L 176.316,197.645 L 176.334,197.6 L 176.352,197.557 L 176.367,197.509 L 176.382,197.463 L 176.4,197.418 L 176.413,197.372 L 176.422,197.327 L 176.434,197.275 L 176.443,197.233 L 176.446,197.178 L 176.452,197.13 L 176.461,197.081 L 176.467,197.03 L 176.467,196.981 L 176.467,196.933 L 176.47,196.878 L 176.47,196.878 L 176.622,196.878 L 176.622,196.878 L 176.622,196.878z"/> + <path style="fill: #4e503e; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 176.47 192.687 L 176.622,192.687 L 176.622,196.878 L 176.47,196.878 L 176.47,192.687 L 176.47,192.687 L 176.622,192.687 L 176.622,192.687 L 176.622,192.687 L 176.47,192.687z"/> + <path style="fill: #4e503e; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 174.497 190.565 L 174.497,190.565 L 174.555,190.565 L 174.612,190.568 L 174.664,190.571 L 174.718,190.574 L 174.773,190.584 L 174.825,190.59 L 174.876,190.596 L 174.928,190.605 L 174.979,190.623 L 175.028,190.632 L 175.079,190.644 L 175.128,190.659 L 175.179,190.674 L 175.228,190.693 L 175.276,190.711 L 175.328,190.735 L 175.376,190.756 L 175.419,190.777 L 175.467,190.796 L 175.509,190.817 L 175.558,190.844 L 175.6,190.871 L 175.643,190.896 L 175.688,190.929 L 175.731,190.953 L 175.77,190.987 L 175.81,191.02 L 175.852,191.047 L 175.888,191.081 L 175.922,191.117 L 175.964,191.153 L 175.997,191.19 L 176.04,191.22 L 176.073,191.259 L 176.103,191.293 L 176.14,191.332 L 176.173,191.381 L 176.203,191.417 L 176.234,191.459 L 176.261,191.499 L 176.291,191.541 L 176.316,191.584 L 176.343,191.629 L 176.367,191.672 L 176.391,191.72 L 176.416,191.766 L 176.437,191.817 L 176.461,191.862 L 176.476,191.911 L 176.494,191.956 L 176.513,192.008 L 176.528,192.05 L 176.543,192.102 L 176.558,192.16 L 176.567,192.202 L 176.582,192.253 L 176.591,192.311 L 176.604,192.366 L 176.604,192.414 L 176.613,192.466 L 176.622,192.52 L 176.622,192.578 L 176.622,192.629 L 176.622,192.687 L 176.47,192.687 L 176.467,192.632 L 176.467,192.584 L 176.467,192.535 L 176.461,192.484 L 176.452,192.432 L 176.446,192.387 L 176.443,192.338 L 176.434,192.284 L 176.422,192.238 L 176.413,192.19 L 176.4,192.141 L 176.382,192.102 L 176.367,192.05 L 176.352,192.008 L 176.334,191.959 L 176.316,191.917 L 176.3,191.875 L 176.276,191.835 L 176.255,191.787 L 176.234,191.744 L 176.21,191.705 L 176.185,191.665 L 176.161,191.626 L 176.134,191.584 L 176.11,191.544 L 176.079,191.505 L 176.052,191.475 L 176.022,191.432 L 175.991,191.402 L 175.961,191.362 L 175.922,191.326 L 175.891,191.293 L 175.861,191.259 L 175.828,191.229 L 175.788,191.196 L 175.752,191.165 L 175.719,191.135 L 175.679,191.108 L 175.637,191.081 L 175.6,191.05 L 175.561,191.026 L 175.522,191.002 L 175.479,190.974 L 175.437,190.953 L 175.397,190.929 L 175.352,190.908 L 175.309,190.893 L 175.267,190.871 L 175.219,190.853 L 175.176,190.835 L 175.131,190.817 L 175.085,190.805 L 175.037,190.796 L 174.994,190.777 L 174.949,190.765 L 174.897,190.756 L 174.849,190.747 L 174.803,190.741 L 174.749,190.735 L 174.703,190.726 L 174.652,190.723 L 174.603,190.72 L 174.552,190.717 L 174.497,190.717 L 174.497,190.717 L 174.497,190.565 L 174.497,190.565 L 174.497,190.565z"/> + <path style="fill: #4e503e; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 152.982 190.717 L 152.982,190.565 L 174.497,190.565 L 174.497,190.717 L 152.982,190.717 L 152.982,190.717 L 152.982,190.565 L 152.982,190.565 L 152.982,190.565 L 152.982,190.717z"/> + <path style="fill: #4e503e; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 150.858 192.687 L 150.858,192.687 L 150.858,192.629 L 150.867,192.578 L 150.867,192.52 L 150.87,192.466 L 150.879,192.414 L 150.885,192.366 L 150.891,192.311 L 150.906,192.253 L 150.915,192.202 L 150.927,192.16 L 150.936,192.102 L 150.955,192.05 L 150.973,192.008 L 150.988,191.956 L 151.009,191.911 L 151.027,191.862 L 151.049,191.817 L 151.067,191.766 L 151.097,191.72 L 151.118,191.672 L 151.143,191.629 L 151.17,191.584 L 151.197,191.541 L 151.227,191.499 L 151.252,191.459 L 151.282,191.417 L 151.312,191.381 L 151.349,191.332 L 151.379,191.293 L 151.409,191.259 L 151.446,191.22 L 151.485,191.19 L 151.521,191.153 L 151.555,191.117 L 151.594,191.081 L 151.634,191.047 L 151.676,191.02 L 151.712,190.987 L 151.752,190.953 L 151.8,190.929 L 151.843,190.896 L 151.882,190.871 L 151.931,190.844 L 151.973,190.823 L 152.021,190.796 L 152.067,190.777 L 152.115,190.756 L 152.155,190.735 L 152.206,190.711 L 152.255,190.693 L 152.3,190.674 L 152.352,190.659 L 152.403,190.644 L 152.452,190.632 L 152.506,190.623 L 152.555,190.605 L 152.609,190.596 L 152.658,190.59 L 152.715,190.584 L 152.767,190.574 L 152.825,190.571 L 152.876,190.568 L 152.931,190.565 L 152.982,190.565 L 152.982,190.717 L 152.931,190.717 L 152.885,190.72 L 152.831,190.723 L 152.785,190.726 L 152.734,190.735 L 152.685,190.741 L 152.637,190.747 L 152.585,190.756 L 152.543,190.765 L 152.494,190.777 L 152.446,190.796 L 152.394,190.805 L 152.352,190.817 L 152.306,190.835 L 152.258,190.853 L 152.215,190.871 L 152.173,190.893 L 152.131,190.908 L 152.091,190.929 L 152.046,190.953 L 152.006,190.974 L 151.964,191.002 L 151.921,191.026 L 151.882,191.05 L 151.846,191.081 L 151.806,191.108 L 151.767,191.135 L 151.731,191.165 L 151.691,191.196 L 151.661,191.229 L 151.624,191.259 L 151.594,191.293 L 151.561,191.326 L 151.521,191.362 L 151.494,191.402 L 151.464,191.432 L 151.433,191.475 L 151.403,191.505 L 151.379,191.544 L 151.352,191.584 L 151.327,191.626 L 151.297,191.665 L 151.273,191.705 L 151.252,191.744 L 151.23,191.787 L 151.209,191.835 L 151.188,191.875 L 151.17,191.917 L 151.152,191.959 L 151.136,192.008 L 151.118,192.05 L 151.106,192.102 L 151.085,192.141 L 151.076,192.19 L 151.067,192.238 L 151.049,192.284 L 151.046,192.332 L 151.036,192.387 L 151.03,192.432 L 151.021,192.484 L 151.021,192.535 L 151.018,192.584 L 151.012,192.632 L 151.012,192.687 L 151.012,192.687 L 150.858,192.687 L 150.858,192.687 L 150.858,192.687z"/> + <path style="fill: #4e503e; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 151.012 196.878 L 150.858,196.878 L 150.858,192.687 L 151.012,192.687 L 151.012,196.878 L 151.012,196.878 L 150.858,196.878 L 150.858,196.878 L 150.858,196.878 L 151.012,196.878z"/> + <path style="fill: #c8c9b6; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 158.413 194.772 L 169.196,194.772 L 169.196,191.362 L 158.413,191.362 L 158.413,194.772z"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 0.4; stroke: #4e503e" d="M 158.413 194.772 L 169.196,194.772 L 169.196,191.362 L 158.413,191.362 L 158.413,194.772"/> + <path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 155.534 192.657 L 155.534,192.693 L 155.534,192.726 L 155.54,192.757 L 155.549,192.793 L 155.552,192.823 L 155.558,192.857 L 155.573,192.884 L 155.583,192.917 L 155.601,192.944 L 155.613,192.975 L 155.631,192.999 L 155.649,193.029 L 155.664,193.051 L 155.689,193.078 L 155.704,193.099 L 155.725,193.126 L 155.752,193.148 L 155.773,193.169 L 155.801,193.187 L 155.822,193.208 L 155.852,193.223 L 155.88,193.238 L 155.91,193.257 L 155.937,193.269 L 155.97,193.278 L 156.001,193.293 L 156.031,193.299 L 156.064,193.311 L 156.095,193.314 L 156.131,193.314 L 156.164,193.32 L 156.201,193.32 L 156.234,193.32 L 156.264,193.314 L 156.298,193.314 L 156.334,193.311 L 156.364,193.299 L 156.392,193.293 L 156.425,193.278 L 156.455,193.269 L 156.486,193.257 L 156.516,193.238 L 156.543,193.223 L 156.568,193.208 L 156.595,193.187 L 156.619,193.169 L 156.646,193.148 L 156.668,193.126 L 156.689,193.099 L 156.71,193.078 L 156.731,193.051 L 156.749,193.029 L 156.768,192.999 L 156.786,192.975 L 156.798,192.944 L 156.807,192.917 L 156.825,192.884 L 156.834,192.857 L 156.84,192.823 L 156.846,192.793 L 156.855,192.757 L 156.858,192.726 L 156.865,192.693 L 156.865,192.657 L 156.865,192.623 L 156.858,192.587 L 156.855,192.557 L 156.846,192.523 L 156.84,192.49 L 156.834,192.463 L 156.825,192.429 L 156.807,192.402 L 156.798,192.369 L 156.786,192.341 L 156.768,192.311 L 156.749,192.284 L 156.731,192.26 L 156.71,192.235 L 156.689,192.214 L 156.668,192.19 L 156.646,192.169 L 156.619,192.141 L 156.595,192.126 L 156.568,192.108 L 156.543,192.09 L 156.516,192.072 L 156.486,192.063 L 156.455,192.047 L 156.425,192.035 L 156.392,192.026 L 156.364,192.011 L 156.334,192.008 L 156.298,192.008 L 156.264,191.996 L 156.234,191.996 L 156.201,191.996 L 156.164,191.996 L 156.131,191.996 L 156.095,192.008 L 156.064,192.008 L 156.031,192.011 L 156.001,192.026 L 155.97,192.035 L 155.937,192.047 L 155.91,192.063 L 155.88,192.072 L 155.852,192.09 L 155.822,192.108 L 155.801,192.126 L 155.773,192.141 L 155.752,192.169 L 155.725,192.19 L 155.704,192.214 L 155.689,192.235 L 155.664,192.26 L 155.649,192.284 L 155.631,192.311 L 155.613,192.341 L 155.601,192.369 L 155.583,192.402 L 155.573,192.429 L 155.558,192.463 L 155.552,192.49 L 155.549,192.523 L 155.54,192.557 L 155.534,192.587 L 155.534,192.623 L 155.534,192.657z"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 0.4; stroke: #4e503e" d="M 155.534 192.657 L 155.534,192.693 L 155.534,192.726 L 155.54,192.757 L 155.549,192.793 L 155.552,192.823 L 155.558,192.857 L 155.573,192.884 L 155.583,192.917 L 155.601,192.944 L 155.613,192.975 L 155.631,192.999 L 155.649,193.029 L 155.664,193.051 L 155.689,193.078 L 155.704,193.099 L 155.725,193.126 L 155.752,193.148 L 155.773,193.169 L 155.801,193.187 L 155.822,193.208 L 155.852,193.223 L 155.88,193.238 L 155.91,193.257 L 155.937,193.269 L 155.97,193.278 L 156.001,193.293 L 156.031,193.299 L 156.064,193.311 L 156.095,193.314 L 156.131,193.314 L 156.164,193.32 L 156.201,193.32 L 156.234,193.32 L 156.264,193.314 L 156.298,193.314 L 156.334,193.311 L 156.364,193.299 L 156.392,193.293 L 156.425,193.278 L 156.455,193.269 L 156.486,193.257 L 156.516,193.238 L 156.543,193.223 L 156.568,193.208 L 156.595,193.187 L 156.619,193.169 L 156.646,193.148 L 156.668,193.126 L 156.689,193.099 L 156.71,193.078 L 156.731,193.051 L 156.749,193.029 L 156.768,192.999 L 156.786,192.975 L 156.798,192.944 L 156.807,192.917 L 156.825,192.884 L 156.834,192.857 L 156.84,192.823 L 156.846,192.793 L 156.855,192.757 L 156.858,192.726 L 156.865,192.693 L 156.865,192.657 L 156.865,192.623 L 156.858,192.587 L 156.855,192.557 L 156.846,192.523 L 156.84,192.49 L 156.834,192.463 L 156.825,192.429 L 156.807,192.402 L 156.798,192.369 L 156.786,192.341 L 156.768,192.311 L 156.749,192.284 L 156.731,192.26 L 156.71,192.235 L 156.689,192.214 L 156.668,192.19 L 156.646,192.169 L 156.619,192.141 L 156.595,192.126 L 156.568,192.108 L 156.543,192.09 L 156.516,192.072 L 156.486,192.063 L 156.455,192.047 L 156.425,192.035 L 156.392,192.026 L 156.364,192.011 L 156.334,192.008 L 156.298,192.008 L 156.264,191.996 L 156.234,191.996 L 156.201,191.996 L 156.164,191.996 L 156.131,191.996 L 156.095,192.008 L 156.064,192.008 L 156.031,192.011 L 156.001,192.026 L 155.97,192.035 L 155.937,192.047 L 155.91,192.063 L 155.88,192.072 L 155.852,192.09 L 155.822,192.108 L 155.801,192.126 L 155.773,192.141 L 155.752,192.169 L 155.725,192.19 L 155.704,192.214 L 155.689,192.235 L 155.664,192.26 L 155.649,192.284 L 155.631,192.311 L 155.613,192.341 L 155.601,192.369 L 155.583,192.402 L 155.573,192.429 L 155.558,192.463 L 155.552,192.49 L 155.549,192.523 L 155.54,192.557 L 155.534,192.587 L 155.534,192.623 L 155.534,192.657"/> + <path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 155.534 194.551 L 155.534,194.584 L 155.534,194.62 L 155.54,194.648 L 155.549,194.684 L 155.552,194.717 L 155.558,194.751 L 155.573,194.778 L 155.583,194.811 L 155.601,194.836 L 155.613,194.869 L 155.631,194.89 L 155.649,194.924 L 155.664,194.948 L 155.689,194.969 L 155.704,194.999 L 155.725,195.02 L 155.752,195.039 L 155.773,195.06 L 155.801,195.081 L 155.822,195.099 L 155.852,195.117 L 155.88,195.133 L 155.91,195.151 L 155.937,195.16 L 155.97,195.172 L 156.001,195.181 L 156.031,195.19 L 156.064,195.199 L 156.095,195.205 L 156.131,195.208 L 156.164,195.211 L 156.201,195.211 L 156.234,195.211 L 156.264,195.208 L 156.298,195.205 L 156.334,195.199 L 156.364,195.19 L 156.392,195.181 L 156.425,195.172 L 156.455,195.16 L 156.486,195.151 L 156.516,195.133 L 156.543,195.117 L 156.568,195.099 L 156.595,195.081 L 156.619,195.06 L 156.646,195.039 L 156.668,195.02 L 156.689,194.999 L 156.71,194.969 L 156.731,194.948 L 156.749,194.924 L 156.768,194.89 L 156.786,194.869 L 156.798,194.836 L 156.807,194.811 L 156.825,194.778 L 156.834,194.751 L 156.84,194.717 L 156.846,194.684 L 156.855,194.648 L 156.858,194.62 L 156.865,194.584 L 156.865,194.551 L 156.865,194.514 L 156.858,194.481 L 156.855,194.451 L 156.846,194.414 L 156.84,194.384 L 156.834,194.354 L 156.825,194.32 L 156.807,194.29 L 156.798,194.263 L 156.786,194.233 L 156.768,194.208 L 156.749,194.178 L 156.731,194.151 L 156.71,194.129 L 156.689,194.102 L 156.668,194.081 L 156.646,194.06 L 156.619,194.039 L 156.595,194.02 L 156.568,193.999 L 156.543,193.981 L 156.516,193.966 L 156.486,193.951 L 156.455,193.942 L 156.425,193.926 L 156.392,193.92 L 156.364,193.908 L 156.334,193.902 L 156.298,193.899 L 156.264,193.89 L 156.234,193.887 L 156.201,193.887 L 156.164,193.887 L 156.131,193.89 L 156.095,193.899 L 156.064,193.902 L 156.031,193.908 L 156.001,193.92 L 155.97,193.926 L 155.937,193.942 L 155.91,193.951 L 155.88,193.966 L 155.852,193.981 L 155.822,193.999 L 155.801,194.02 L 155.773,194.039 L 155.752,194.06 L 155.725,194.081 L 155.704,194.102 L 155.689,194.129 L 155.664,194.151 L 155.649,194.178 L 155.631,194.208 L 155.613,194.233 L 155.601,194.263 L 155.583,194.29 L 155.573,194.32 L 155.558,194.354 L 155.552,194.384 L 155.549,194.414 L 155.54,194.451 L 155.534,194.481 L 155.534,194.514 L 155.534,194.551z"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 0.4; stroke: #4e503e" d="M 155.534 194.551 L 155.534,194.584 L 155.534,194.62 L 155.54,194.648 L 155.549,194.684 L 155.552,194.717 L 155.558,194.751 L 155.573,194.778 L 155.583,194.811 L 155.601,194.836 L 155.613,194.869 L 155.631,194.89 L 155.649,194.924 L 155.664,194.948 L 155.689,194.969 L 155.704,194.999 L 155.725,195.02 L 155.752,195.039 L 155.773,195.06 L 155.801,195.081 L 155.822,195.099 L 155.852,195.117 L 155.88,195.133 L 155.91,195.151 L 155.937,195.16 L 155.97,195.172 L 156.001,195.181 L 156.031,195.19 L 156.064,195.199 L 156.095,195.205 L 156.131,195.208 L 156.164,195.211 L 156.201,195.211 L 156.234,195.211 L 156.264,195.208 L 156.298,195.205 L 156.334,195.199 L 156.364,195.19 L 156.392,195.181 L 156.425,195.172 L 156.455,195.16 L 156.486,195.151 L 156.516,195.133 L 156.543,195.117 L 156.568,195.099 L 156.595,195.081 L 156.619,195.06 L 156.646,195.039 L 156.668,195.02 L 156.689,194.999 L 156.71,194.969 L 156.731,194.948 L 156.749,194.924 L 156.768,194.89 L 156.786,194.869 L 156.798,194.836 L 156.807,194.811 L 156.825,194.778 L 156.834,194.751 L 156.84,194.717 L 156.846,194.684 L 156.855,194.648 L 156.858,194.62 L 156.865,194.584 L 156.865,194.551 L 156.865,194.514 L 156.858,194.481 L 156.855,194.451 L 156.846,194.414 L 156.84,194.384 L 156.834,194.354 L 156.825,194.32 L 156.807,194.29 L 156.798,194.263 L 156.786,194.233 L 156.768,194.208 L 156.749,194.178 L 156.731,194.151 L 156.71,194.129 L 156.689,194.102 L 156.668,194.081 L 156.646,194.06 L 156.619,194.039 L 156.595,194.02 L 156.568,193.999 L 156.543,193.981 L 156.516,193.966 L 156.486,193.951 L 156.455,193.942 L 156.425,193.926 L 156.392,193.92 L 156.364,193.908 L 156.334,193.902 L 156.298,193.899 L 156.264,193.89 L 156.234,193.887 L 156.201,193.887 L 156.164,193.887 L 156.131,193.89 L 156.095,193.899 L 156.064,193.902 L 156.031,193.908 L 156.001,193.92 L 155.97,193.926 L 155.937,193.942 L 155.91,193.951 L 155.88,193.966 L 155.852,193.981 L 155.822,193.999 L 155.801,194.02 L 155.773,194.039 L 155.752,194.06 L 155.725,194.081 L 155.704,194.102 L 155.689,194.129 L 155.664,194.151 L 155.649,194.178 L 155.631,194.208 L 155.613,194.233 L 155.601,194.263 L 155.583,194.29 L 155.573,194.32 L 155.558,194.354 L 155.552,194.384 L 155.549,194.414 L 155.54,194.451 L 155.534,194.481 L 155.534,194.514 L 155.534,194.551"/> + <path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 155.534 196.442 L 155.534,196.478 L 155.534,196.515 L 155.54,196.545 L 155.549,196.575 L 155.552,196.612 L 155.558,196.639 L 155.573,196.669 L 155.583,196.703 L 155.601,196.73 L 155.613,196.76 L 155.631,196.787 L 155.649,196.818 L 155.664,196.839 L 155.689,196.866 L 155.704,196.887 L 155.725,196.915 L 155.752,196.936 L 155.773,196.957 L 155.801,196.972 L 155.822,196.997 L 155.852,197.009 L 155.88,197.027 L 155.91,197.045 L 155.937,197.051 L 155.97,197.066 L 156.001,197.081 L 156.031,197.087 L 156.064,197.09 L 156.095,197.103 L 156.131,197.103 L 156.164,197.103 L 156.201,197.103 L 156.234,197.103 L 156.264,197.103 L 156.298,197.103 L 156.334,197.09 L 156.364,197.087 L 156.392,197.081 L 156.425,197.066 L 156.455,197.051 L 156.486,197.045 L 156.516,197.027 L 156.543,197.009 L 156.568,196.997 L 156.595,196.972 L 156.619,196.957 L 156.646,196.936 L 156.668,196.915 L 156.689,196.887 L 156.71,196.866 L 156.731,196.839 L 156.749,196.818 L 156.768,196.787 L 156.786,196.76 L 156.798,196.73 L 156.807,196.703 L 156.825,196.669 L 156.834,196.639 L 156.84,196.612 L 156.846,196.575 L 156.855,196.545 L 156.858,196.515 L 156.865,196.478 L 156.865,196.442 L 156.865,196.406 L 156.858,196.375 L 156.855,196.345 L 156.846,196.312 L 156.84,196.275 L 156.834,196.248 L 156.825,196.215 L 156.807,196.184 L 156.798,196.157 L 156.786,196.124 L 156.768,196.099 L 156.749,196.072 L 156.731,196.048 L 156.71,196.024 L 156.689,196.002 L 156.668,195.972 L 156.646,195.951 L 156.619,195.93 L 156.595,195.912 L 156.568,195.896 L 156.543,195.875 L 156.516,195.86 L 156.486,195.851 L 156.455,195.833 L 156.425,195.821 L 156.392,195.812 L 156.364,195.799 L 156.334,195.793 L 156.298,195.787 L 156.264,195.784 L 156.234,195.778 L 156.201,195.778 L 156.164,195.778 L 156.131,195.784 L 156.095,195.787 L 156.064,195.793 L 156.031,195.799 L 156.001,195.812 L 155.97,195.821 L 155.937,195.833 L 155.91,195.851 L 155.88,195.86 L 155.852,195.875 L 155.822,195.896 L 155.801,195.912 L 155.773,195.93 L 155.752,195.951 L 155.725,195.972 L 155.704,196.002 L 155.689,196.024 L 155.664,196.048 L 155.649,196.072 L 155.631,196.099 L 155.613,196.124 L 155.601,196.157 L 155.583,196.184 L 155.573,196.215 L 155.558,196.248 L 155.552,196.275 L 155.549,196.312 L 155.54,196.345 L 155.534,196.375 L 155.534,196.406 L 155.534,196.442z"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 0.4; stroke: #4e503e" d="M 155.534 196.442 L 155.534,196.478 L 155.534,196.515 L 155.54,196.545 L 155.549,196.575 L 155.552,196.612 L 155.558,196.639 L 155.573,196.669 L 155.583,196.703 L 155.601,196.73 L 155.613,196.76 L 155.631,196.787 L 155.649,196.818 L 155.664,196.839 L 155.689,196.866 L 155.704,196.887 L 155.725,196.915 L 155.752,196.936 L 155.773,196.957 L 155.801,196.972 L 155.822,196.997 L 155.852,197.009 L 155.88,197.027 L 155.91,197.045 L 155.937,197.051 L 155.97,197.066 L 156.001,197.081 L 156.031,197.087 L 156.064,197.09 L 156.095,197.103 L 156.131,197.103 L 156.164,197.103 L 156.201,197.103 L 156.234,197.103 L 156.264,197.103 L 156.298,197.103 L 156.334,197.09 L 156.364,197.087 L 156.392,197.081 L 156.425,197.066 L 156.455,197.051 L 156.486,197.045 L 156.516,197.027 L 156.543,197.009 L 156.568,196.997 L 156.595,196.972 L 156.619,196.957 L 156.646,196.936 L 156.668,196.915 L 156.689,196.887 L 156.71,196.866 L 156.731,196.839 L 156.749,196.818 L 156.768,196.787 L 156.786,196.76 L 156.798,196.73 L 156.807,196.703 L 156.825,196.669 L 156.834,196.639 L 156.84,196.612 L 156.846,196.575 L 156.855,196.545 L 156.858,196.515 L 156.865,196.478 L 156.865,196.442 L 156.865,196.406 L 156.858,196.375 L 156.855,196.345 L 156.846,196.312 L 156.84,196.275 L 156.834,196.248 L 156.825,196.215 L 156.807,196.184 L 156.798,196.157 L 156.786,196.124 L 156.768,196.099 L 156.749,196.072 L 156.731,196.048 L 156.71,196.024 L 156.689,196.002 L 156.668,195.972 L 156.646,195.951 L 156.619,195.93 L 156.595,195.912 L 156.568,195.896 L 156.543,195.875 L 156.516,195.86 L 156.486,195.851 L 156.455,195.833 L 156.425,195.821 L 156.392,195.812 L 156.364,195.799 L 156.334,195.793 L 156.298,195.787 L 156.264,195.784 L 156.234,195.778 L 156.201,195.778 L 156.164,195.778 L 156.131,195.784 L 156.095,195.787 L 156.064,195.793 L 156.031,195.799 L 156.001,195.812 L 155.97,195.821 L 155.937,195.833 L 155.91,195.851 L 155.88,195.86 L 155.852,195.875 L 155.822,195.896 L 155.801,195.912 L 155.773,195.93 L 155.752,195.951 L 155.725,195.972 L 155.704,196.002 L 155.689,196.024 L 155.664,196.048 L 155.649,196.072 L 155.631,196.099 L 155.613,196.124 L 155.601,196.157 L 155.583,196.184 L 155.573,196.215 L 155.558,196.248 L 155.552,196.275 L 155.549,196.312 L 155.54,196.345 L 155.534,196.375 L 155.534,196.406 L 155.534,196.442"/> + <path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 160.413 197.045 L 160.423,197.087 L 160.432,197.142 L 160.453,197.184 L 160.477,197.233 L 160.514,197.275 L 160.553,197.327 L 160.595,197.369 L 160.653,197.406 L 160.717,197.448 L 160.786,197.487 L 160.859,197.536 L 160.938,197.569 L 161.029,197.606 L 161.12,197.645 L 161.217,197.678 L 161.317,197.709 L 161.423,197.739 L 161.538,197.769 L 161.653,197.803 L 161.771,197.827 L 161.902,197.848 L 162.026,197.872 L 162.156,197.891 L 162.296,197.915 L 162.435,197.933 L 162.577,197.942 L 162.726,197.957 L 162.874,197.972 L 163.026,197.975 L 163.181,197.982 L 163.338,197.991 L 163.496,197.991 L 163.653,197.991 L 163.811,197.982 L 163.965,197.975 L 164.12,197.972 L 164.266,197.957 L 164.414,197.942 L 164.556,197.933 L 164.699,197.915 L 164.835,197.891 L 164.969,197.872 L 165.096,197.848 L 165.217,197.827 L 165.338,197.803 L 165.457,197.769 L 165.569,197.739 L 165.672,197.709 L 165.775,197.678 L 165.872,197.645 L 165.966,197.606 L 166.051,197.569 L 166.132,197.536 L 166.205,197.487 L 166.275,197.448 L 166.336,197.406 L 166.393,197.369 L 166.442,197.327 L 166.478,197.275 L 166.514,197.233 L 166.539,197.184 L 166.563,197.142 L 166.575,197.087 L 166.578,197.045 L 166.575,196.99 L 166.563,196.942 L 166.539,196.897 L 166.514,196.848 L 166.478,196.806 L 166.442,196.76 L 166.393,196.715 L 166.336,196.669 L 166.275,196.63 L 166.205,196.59 L 166.132,196.551 L 166.051,196.515 L 165.966,196.478 L 165.872,196.439 L 165.775,196.403 L 165.672,196.372 L 165.569,196.345 L 165.457,196.312 L 165.338,196.281 L 165.217,196.254 L 165.096,196.233 L 164.969,196.212 L 164.835,196.184 L 164.699,196.172 L 164.556,196.154 L 164.414,196.136 L 164.266,196.121 L 164.12,196.115 L 163.965,196.102 L 163.811,196.099 L 163.653,196.096 L 163.496,196.096 L 163.338,196.096 L 163.181,196.099 L 163.026,196.102 L 162.874,196.115 L 162.726,196.121 L 162.577,196.136 L 162.435,196.154 L 162.296,196.172 L 162.156,196.184 L 162.026,196.212 L 161.902,196.233 L 161.771,196.254 L 161.653,196.281 L 161.538,196.312 L 161.423,196.345 L 161.317,196.372 L 161.217,196.403 L 161.12,196.439 L 161.029,196.478 L 160.938,196.515 L 160.859,196.551 L 160.786,196.59 L 160.717,196.63 L 160.653,196.669 L 160.595,196.715 L 160.553,196.76 L 160.514,196.806 L 160.477,196.848 L 160.453,196.897 L 160.432,196.942 L 160.423,196.99 L 160.413,197.045z"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 0.4; stroke: #4e503e" d="M 160.413 197.045 L 160.423,197.087 L 160.432,197.142 L 160.453,197.184 L 160.477,197.233 L 160.514,197.275 L 160.553,197.327 L 160.595,197.369 L 160.653,197.406 L 160.717,197.448 L 160.786,197.487 L 160.859,197.536 L 160.938,197.569 L 161.029,197.606 L 161.12,197.645 L 161.217,197.678 L 161.317,197.709 L 161.423,197.739 L 161.538,197.769 L 161.653,197.803 L 161.771,197.827 L 161.902,197.848 L 162.026,197.872 L 162.156,197.891 L 162.296,197.915 L 162.435,197.933 L 162.577,197.942 L 162.726,197.957 L 162.874,197.972 L 163.026,197.975 L 163.181,197.982 L 163.338,197.991 L 163.496,197.991 L 163.653,197.991 L 163.811,197.982 L 163.965,197.975 L 164.12,197.972 L 164.266,197.957 L 164.414,197.942 L 164.556,197.933 L 164.699,197.915 L 164.835,197.891 L 164.969,197.872 L 165.096,197.848 L 165.217,197.827 L 165.338,197.803 L 165.457,197.769 L 165.569,197.739 L 165.672,197.709 L 165.775,197.678 L 165.872,197.645 L 165.966,197.606 L 166.051,197.569 L 166.132,197.536 L 166.205,197.487 L 166.275,197.448 L 166.336,197.406 L 166.393,197.369 L 166.442,197.327 L 166.478,197.275 L 166.514,197.233 L 166.539,197.184 L 166.563,197.142 L 166.575,197.087 L 166.578,197.045 L 166.575,196.99 L 166.563,196.942 L 166.539,196.897 L 166.514,196.848 L 166.478,196.806 L 166.442,196.76 L 166.393,196.715 L 166.336,196.669 L 166.275,196.63 L 166.205,196.59 L 166.132,196.551 L 166.051,196.515 L 165.966,196.478 L 165.872,196.439 L 165.775,196.403 L 165.672,196.372 L 165.569,196.345 L 165.457,196.312 L 165.338,196.281 L 165.217,196.254 L 165.096,196.233 L 164.969,196.212 L 164.835,196.184 L 164.699,196.172 L 164.556,196.154 L 164.414,196.136 L 164.266,196.121 L 164.12,196.115 L 163.965,196.102 L 163.811,196.099 L 163.653,196.096 L 163.496,196.096 L 163.338,196.096 L 163.181,196.099 L 163.026,196.102 L 162.874,196.115 L 162.726,196.121 L 162.577,196.136 L 162.435,196.154 L 162.296,196.172 L 162.156,196.184 L 162.026,196.212 L 161.902,196.233 L 161.771,196.254 L 161.653,196.281 L 161.538,196.312 L 161.423,196.345 L 161.317,196.372 L 161.217,196.403 L 161.12,196.439 L 161.029,196.478 L 160.938,196.515 L 160.859,196.551 L 160.786,196.59 L 160.717,196.63 L 160.653,196.669 L 160.595,196.715 L 160.553,196.76 L 160.514,196.806 L 160.477,196.848 L 160.453,196.897 L 160.432,196.942 L 160.423,196.99 L 160.413,197.045"/> + </g> + <g> + <line style="fill: none; stroke-opacity: 1; stroke-width: 1.4; stroke: #9668a3" x1="334.343" y1="34.1776" x2="183.79" y2="175.071"/> + <polygon style="fill: #9668a3; fill-opacity: 1; stroke-opacity: 1; stroke-width: 1.4; stroke: #9668a3" fill-rule="evenodd" points="339.819,29.0529 335.934,39.5366 334.343,34.1776 329.101,32.2352 "/> + <polygon style="fill: #9668a3; fill-opacity: 1; stroke-opacity: 1; stroke-width: 1.4; stroke: #9668a3" fill-rule="evenodd" points="178.314,180.196 182.199,169.712 183.79,175.071 189.032,177.013 "/> + </g> + <text font-size="12.2372" style="fill: #000000; fill-opacity: 1; stroke: none;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" x="99.2734" y="223.796"> + <tspan x="99.2734" y="223.796">Sink (libsink)</tspan> + </text> + <text font-size="12.2372" style="fill: #000000; fill-opacity: 1; stroke: none;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" x="403.894" y="-54.712"> + <tspan x="403.894" y="-54.712">Tree (server)</tspan> + </text> + <g> + <line style="fill: none; stroke-opacity: 1; stroke-width: 1.4; stroke: #000000" x1="250.777" y1="196.376" x2="337.324" y2="93.4856"/> + <polyline style="fill: none; stroke-opacity: 1; stroke-width: 1.4; stroke: #000000" points="252.38,186.702 249.77,197.573 260.033,193.139 "/> + </g> + <g> + <path style="fill: #ffffff; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 729.576 37.2645 L 712.521,37.2645 L 712.521,-23.3786 L 729.576,-23.3786 L 729.576,37.2645z"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 1.6; stroke: #7a7a5a" d="M 729.576 37.2645 L 712.521,37.2645 L 712.521,-23.3786 L 729.576,-23.3786 L 729.576,37.2645"/> + <path style="fill: #ffffff; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 740.827 97.4328 L 729.576,36.7935 L 712.52,36.7935 L 702.452,97.4328 L 740.827,97.4328z"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 1.6; stroke: #7a7a5a" d="M 740.827 97.4328 L 729.576,36.7935 L 712.52,36.7935 L 702.452,97.4328"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 1.6; stroke: #7a7a5a" d="M 741.42 97.4328 L 706.362,79.9035 L 734.787,63.7954 L 711.099,49.1087 L 728.631,37.2645 L 712.997,16.4188 L 729.105,3.15338 L 712.523,-11.5334 L 729.579,-22.9037"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 1.6; stroke: #7a7a5a" d="M 702.168 97.4328 L 736.003,79.9035 L 707.577,63.7954 L 731.265,49.1087 L 713.736,37.2645 L 729.368,16.4188 L 713.26,3.15338 L 729.841,-11.5334 L 712.786,-22.9037"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 1.6; stroke: #7a7a5a" d="M 713.533 -23.3775 L 729.167,-23.3775 L 725.269,-30.9334 L 717.607,-30.9334 L 713.533,-23.3775"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 1.6; stroke: #7a7a5a" d="M 706.202 -21.8642 L 704.797,-23.5887 L 703.83,-23.5887 L 703.83,-14.5303 L 698.007,-14.5303 L 697.468,-13.9915 L 696.93,-13.9915 L 696.014,-14.9093 C 695.097,-15.2883 694.558,-13.5611 694.558,-13.5611 L 694.558,-12.9168 C 694.558,-12.9168 695.097,-11.1895 696.014,-11.5659 L 696.93,-12.4836 L 697.468,-12.4836 L 698.007,-11.9476 L 703.83,-11.9476 L 703.83,-2.88646 L 704.797,-2.88646 L 706.202,-4.61367 L 706.202,-21.8669"/> + <path style="fill: #b3b3b3; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #000000" fill-rule="evenodd" d="M 706.202 -4.61097 L 709.22,-4.61097 C 710.839,-6.44647 710.623,-10.2176 710.623,-10.2176 L 713.75,-10.2176 L 713.75,-16.2548 L 710.623,-16.2548 C 710.623,-16.2548 710.839,-20.0287 709.22,-21.8615 L 706.202,-21.8615 L 706.202,-4.60826 L 706.202,-4.61097z"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 1.6; stroke: #7a7a5a" d="M 706.202 -4.61097 L 709.22,-4.61097 C 710.839,-6.44647 710.623,-10.2176 710.623,-10.2176 L 713.75,-10.2176 L 713.75,-12.8031 L 713.75,-13.6667 L 713.75,-16.2548 L 710.623,-16.2548 C 710.623,-16.2548 710.839,-20.0287 709.22,-21.8615 L 706.202,-21.8615 L 706.202,-4.60826"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 1.6; stroke: #7a7a5a" d="M 706.202 -21.8642 L 704.797,-23.5887 L 703.83,-23.5887 L 703.83,-14.5303 L 698.007,-14.5303 L 697.468,-13.9915 L 696.93,-13.9915 L 696.014,-14.9093 C 695.097,-15.2883 694.558,-13.5611 694.558,-13.5611 L 694.558,-12.9168 C 694.558,-12.9168 695.097,-11.1895 696.014,-11.5659 L 696.93,-12.4836 L 697.468,-12.4836 L 698.007,-11.9476 L 703.83,-11.9476 L 703.83,-2.88646 L 704.797,-2.88646 L 706.202,-4.61367 L 706.202,-21.8669"/> + <path style="fill: #b3b3b3; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #000000" fill-rule="evenodd" d="M 706.202 -4.61097 L 709.22,-4.61097 C 710.839,-6.44647 710.623,-10.2176 710.623,-10.2176 L 713.75,-10.2176 L 713.75,-16.2548 L 710.623,-16.2548 C 710.623,-16.2548 710.839,-20.0287 709.22,-21.8615 L 706.202,-21.8615 L 706.202,-4.60826 L 706.202,-4.61097z"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 1.6; stroke: #7a7a5a" d="M 706.202 -4.61097 L 709.22,-4.61097 C 710.839,-6.44647 710.623,-10.2176 710.623,-10.2176 L 713.75,-10.2176 L 713.75,-12.8031 L 713.75,-13.6667 L 713.75,-16.2548 L 710.623,-16.2548 C 710.623,-16.2548 710.839,-20.0287 709.22,-21.8615 L 706.202,-21.8615 L 706.202,-4.60826"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 1.6; stroke: #7a7a5a" d="M 706.202 6.08802 L 704.797,4.3608 L 703.83,4.3608 L 703.83,13.4219 L 698.007,13.4219 L 697.468,13.9607 L 696.93,13.9607 L 696.014,13.0402 C 695.097,12.6639 694.558,14.3911 694.558,14.3911 L 694.558,15.0354 C 694.558,15.0354 695.097,16.7626 696.014,16.3836 L 696.93,15.4659 L 697.468,15.4659 L 698.007,16.0046 L 703.83,16.0046 L 703.83,25.063 L 704.797,25.063 L 706.202,23.3385 L 706.202,6.08531"/> + <path style="fill: #b3b3b3; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #000000" fill-rule="evenodd" d="M 706.202 23.3412 L 709.22,23.3412 C 710.839,21.5057 710.623,17.7345 710.623,17.7345 L 713.75,17.7345 L 713.75,11.6974 L 710.623,11.6974 C 710.623,11.6974 710.839,7.92352 709.22,6.09073 L 706.202,6.09073 L 706.202,23.3439 L 706.202,23.3412z"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 1.6; stroke: #7a7a5a" d="M 706.202 23.3412 L 709.22,23.3412 C 710.839,21.5057 710.623,17.7345 710.623,17.7345 L 713.75,17.7345 L 713.75,15.1464 L 713.75,14.2855 L 713.75,11.6974 L 710.623,11.6974 C 710.623,11.6974 710.839,7.92352 709.22,6.09073 L 706.202,6.09073 L 706.202,23.3439"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 1.6; stroke: #7a7a5a" d="M 706.202 6.08802 L 704.797,4.3608 L 703.83,4.3608 L 703.83,13.4219 L 698.007,13.4219 L 697.468,13.9607 L 696.93,13.9607 L 696.014,13.0402 C 695.097,12.6639 694.558,14.3911 694.558,14.3911 L 694.558,15.0354 C 694.558,15.0354 695.097,16.7626 696.014,16.3836 L 696.93,15.4659 L 697.468,15.4659 L 698.007,16.0046 L 703.83,16.0046 L 703.83,25.063 L 704.797,25.063 L 706.202,23.3385 L 706.202,6.08531"/> + <path style="fill: #b3b3b3; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #000000" fill-rule="evenodd" d="M 706.202 23.3412 L 709.22,23.3412 C 710.839,21.5057 710.623,17.7345 710.623,17.7345 L 713.75,17.7345 L 713.75,11.6974 L 710.623,11.6974 C 710.623,11.6974 710.839,7.92352 709.22,6.09073 L 706.202,6.09073 L 706.202,23.3439 L 706.202,23.3412z"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 1.6; stroke: #7a7a5a" d="M 706.202 23.3412 L 709.22,23.3412 C 710.839,21.5057 710.623,17.7345 710.623,17.7345 L 713.75,17.7345 L 713.75,15.1464 L 713.75,14.2855 L 713.75,11.6974 L 710.623,11.6974 C 710.623,11.6974 710.839,7.92352 709.22,6.09073 L 706.202,6.09073 L 706.202,23.3439"/> + </g> + <g> + <path style="fill: #b7b79d; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 573.978 76.6022 L 573.978,133.232 L 607.449,133.232 L 607.449,76.6022 L 573.978,76.6022z"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #494936" d="M 573.978 76.6022 L 573.978,133.232 L 607.449,133.232 L 607.449,76.6022 L 573.978,76.6022"/> + <path style="fill: #c9c9b6; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 573.978 76.6022 L 578.514,72.0466 L 611.975,72.0466 L 607.449,76.6022 L 573.978,76.6022z"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #494936" d="M 573.978 76.6022 L 578.514,72.0466 L 611.755,72.0466"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #494936" d="M 611.755 72.2769 L 607.449,76.6022 L 573.978,76.6022"/> + <path style="fill: #c9c9b6; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 576.041 79.8963 L 591.329,79.8963 L 591.329,87.3254 L 576.041,87.3254 L 576.041,79.8963z"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #626248" d="M 576.041 79.8963 L 591.319,79.8963 L 591.319,87.3154 L 576.041,87.3154 L 576.041,79.8963"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 0.6; stroke: #ecece7" d="M 578.103 83.6209 L 588.826,83.6209"/> + <path style="fill: #7a7a5a; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 607.449 133.232 L 611.975,128.666 L 611.975,72.0466 L 607.449,76.6022 L 607.449,133.232z"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #494936" d="M 607.449 133.232 L 611.755,128.897"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #494936" d="M 611.755 72.2769 L 607.449,76.6022 L 607.449,133.232"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 0.6; stroke: #ecece7" d="M 574.399 129.497 L 607.439,129.497"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 0.6; stroke: #000000" d="M 574.399 99.3302 L 607.439,99.3302"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 0.6; stroke: #494936" d="M 573.978 129.087 L 607.409,129.087"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 0.6; stroke: #000000" d="M 573.978 98.9097 L 607.409,98.9097"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #ecece7" d="M 576.041 86.9249 L 576.041,79.8963 L 590.909,79.8963"/> + </g> + <g> + <path style="fill: #c9c9b6; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 550.009 125.611 L 552.48,123.305 L 570.933,123.305 L 568.466,125.611 L 550.009,125.611z"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #494936" d="M 550.009 125.611 L 552.48,123.305 L 570.933,123.305 L 568.466,125.611 L 550.009,125.611"/> + <path style="fill: #b7b79d; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 550.009 125.611 L 568.466,125.611 L 568.466,129.078 L 550.009,129.078 L 550.009,125.611z"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #494936" d="M 550.009 125.611 L 568.466,125.611 L 568.466,129.078 L 550.009,129.078 L 550.009,125.611"/> + <path style="fill: #7a7a5a; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 568.466 129.078 L 570.933,126.619 L 570.933,123.305 L 568.466,125.611 L 568.466,129.078z"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #494936" d="M 568.466 129.078 L 570.933,126.619 L 570.933,123.305 L 568.466,125.611 L 568.466,129.078"/> + <path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 550.595 125.178 L 552.48,123.305 L 570.496,123.305 L 568.607,125.178 L 550.595,125.178z"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #000000" d="M 550.595 125.178 L 552.48,123.305 L 570.496,123.305 L 568.607,125.178 L 550.595,125.178"/> + <path style="fill: #c9c9b6; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 550.009 110.29 L 552.047,108.417 L 570.496,108.417 L 568.466,110.29 L 550.009,110.29z"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #494936" d="M 550.009 110.29 L 552.047,108.417 L 570.496,108.417 L 568.466,110.29 L 550.009,110.29"/> + <path style="fill: #b7b79d; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 550.009 110.29 L 568.603,110.29 L 568.603,124.891 L 550.009,124.891 L 550.009,110.29z"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #494936" d="M 550.009 110.29 L 568.599,110.29 L 568.599,124.883 L 550.009,124.883 L 550.009,110.29"/> + <path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 551.618 112.172 L 567.013,112.172 L 567.013,123.447 L 551.618,123.447 L 551.618,112.172z"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #494936" d="M 551.618 112.172 L 567.01,112.172 L 567.01,123.439 L 551.618,123.439 L 551.618,112.172"/> + <path style="fill: #7a7a5a; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 568.466 124.737 L 570.496,122.719 L 570.496,108.417 L 568.466,110.29 L 568.466,124.737z"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #494936" d="M 568.466 124.737 L 570.496,122.719 L 570.496,108.417 L 568.466,110.29 L 568.466,124.737"/> + <path style="fill: #c9c9b6; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 546.384 131.967 L 549.288,128.358 L 569.327,128.358 L 566.427,131.967 L 546.384,131.967z"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #494936" d="M 546.404 131.943 L 549.288,128.358 L 569.327,128.358 L 566.427,131.967 L 546.404,131.967"/> + <path style="fill: #7a7a5a; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 566.427 132.695 L 569.327,129.657 L 569.327,128.358 L 566.427,131.967 L 566.427,132.695z"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #494936" d="M 566.439 132.675 L 569.327,129.657 L 569.327,128.358 L 566.427,131.967 L 566.427,132.675"/> + <path style="fill: #b7b79d; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 546.384 131.967 L 566.427,131.967 L 566.427,132.695 L 546.384,132.695 L 546.384,131.967z"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #494936" d="M 546.404 131.967 L 566.427,131.967 L 566.427,132.675"/> + </g> + <path style="fill: none; stroke-opacity: 1; stroke-width: 2; stroke: #cc9f9f" d="M 677.266,-36.2838 A 55.3831,55.3831 0 0 0 696.348,42.7762"/> + <g> + <line style="fill: none; stroke-opacity: 1; stroke-width: 1.4; stroke: #000000" x1="557.026" y1="76.4768" x2="458.896" y2="37.807"/> + <polygon style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 1.4; stroke: #000000" fill-rule="evenodd" points="564.004,79.2265 552.867,80.2121 557.026,76.4768 556.533,70.9084 "/> + <polygon style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 1.4; stroke: #000000" fill-rule="evenodd" points="451.918,35.0573 463.055,34.0717 458.896,37.807 459.389,43.3754 "/> + </g> + <text font-size="12.8" style="fill: #000000; fill-opacity: 1; stroke: none;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" x="564.784" y="152.984"> + <tspan x="564.784" y="152.984">Node</tspan> + </text> + <g> + <path style="fill: none; stroke-opacity: 1; stroke-width: 2.4; stroke: #7a7a5a" d="M 569.176 40.291 L 587.042,22.4254"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 2.4; stroke: #7a7a5a" d="M 575.632 40.291 L 593.499,22.4254"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 2.4; stroke: #7a7a5a" d="M 582.088 40.291 L 599.954,22.4254"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 2.4; stroke: #7a7a5a" d="M 588.544 40.291 L 606.41,22.4254"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 2.4; stroke: #7a7a5a" d="M 595.001 40.291 L 612.867,22.4254"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 2.4; stroke: #7a7a5a" d="M 575.292 30.6069 L 607.575,30.6069"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 2.4; stroke: #7a7a5a" d="M 591.773 30.7773 L 591.773,58.5403"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 2.4; stroke: #7a7a5a" d="M 592.781 43.1909 L 592.781,73.7362"/> + <path style="fill: #7a7a5a; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #7a7a5a" fill-rule="evenodd" d="M 590.204 53.8634 L 593.885,53.8634 L 593.885,47.2387 L 590.204,47.2387 L 590.204,53.8634z"/> + </g> + <path style="fill: none; stroke-opacity: 1; stroke-width: 2; stroke: #cc9f9f" d="M 654.744,-52.0974 A 83.0743,83.0743 0 0 0 683.366,66.4926"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 2; stroke: #cc9f9f" d="M 631.852,-67.2536 A 110.766,110.766 0 0 0 670.016,90.8664"/> + <path style="fill: none; stroke-opacity: 1; stroke-width: 2; stroke: #cc9f9f" d="M 609.168,-82.7398 A 138.457,138.457 0 0 0 656.872,114.91"/> + <text font-size="12.2372" style="fill: #000000; fill-opacity: 1; stroke: none;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" transform="translate(467.74,28.4317) rotate(21.75) translate(-467.74,-28.4317)"> + <tspan x="467.74" y="28.4317">Remote Resource</tspan> + </text> + <text font-size="12.2372" style="fill: #000000; fill-opacity: 1; stroke: none;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" transform="translate(209.104,140.148) rotate(-43.25) translate(-209.104,-140.148)"> + <tspan x="209.104" y="140.148">BIMU™ (ビム) Stream</tspan> + </text> + <text font-size="12.8" style="fill: #000000; fill-opacity: 1; stroke: none;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" x="371.854" y="192.021"> + <tspan x="371.854" y="192.021"></tspan> + </text> + <text font-size="12.2372" style="fill: #000000; fill-opacity: 1; stroke: none;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" x="309.606" y="169.975"> + <tspan x="309.606" y="169.975">System Interface</tspan> + </text> + </g> +</svg> diff --git a/doc/references.txt b/doc/references.txt index acd14f9..702f7eb 100644 --- a/doc/references.txt +++ b/doc/references.txt @@ -1,3 +1,5 @@ +:stylesheet: style.css + = References Video @@ -13,8 +15,11 @@ Vsync/VRR * Current understanding of vsync and tearing: - Vsync operates on an interupt. - You cannot avoid tearing without vsync. + - VRR is completely ineffective outside of the display's supported range. - A higher fps and refresh rate while tearing will be less noticable. - - VRR can eliminiate tearing. +* https://blurbusters.com/gsync/gsync101-input-lag-tests-and-settings/14/ +* https://blurbusters.com/gsync/gsync101-input-lag-tests-and-settings/15/ +* https://old.reddit.com/r/Amd/comments/4ypw5k/freesync_is_so_fcking_awesome/d6zl13v/ Latency/Present ~~~~~~~~~~~~~~~ @@ -29,6 +34,7 @@ Old Video Standards Stuff * https://en.wikipedia.org/wiki/pixel_aspect_ratio * https://en.wikipedia.org/wiki/display_aspect_ratio - PAL and NTSC are both supposed to be displayed on 4:3 physical aspect ratio screens even though they are internally different aspect ratios and resolutions. The difference is the size of the "pixel" (PAL has more, shorter scanlines). + image:pal_vs_ntsc_aspect_ratio.png[PalVsNtsc,1100] * https://en.wikipedia.org/wiki/Anamorphic_widescreen Python diff --git a/doc/style.css b/doc/style.css new file mode 100644 index 0000000..bc6ed15 --- /dev/null +++ b/doc/style.css @@ -0,0 +1,13 @@ +body { + font-family: serif; + margin: 1em 45% 1em 5%; + background-color: #f4ddca +} + +h3 { + text-decoration: underline; +} + +strong { + color: #543e41; +} @@ -20,11 +20,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1705316053, - "narHash": "sha256-J2Ey5mPFT8gdfL2XC0JTZvKaBw/b2pnyudEXFvl+dQM=", + "lastModified": 1705677747, + "narHash": "sha256-eyM3okYtMgYDgmYukoUzrmuoY4xl4FUujnsv/P6I/zI=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "c3e128f3c0ecc1fb04aef9f72b3dcc2f6cecf370", + "rev": "bbe7d8f876fbbe7c959c90ba2ae2852220573261", "type": "github" }, "original": { @@ -75,7 +75,7 @@ python3.pkgs.cython_3 python3.pkgs.setuptools nodePackages.pyright - asciidoc + asciidoctor ]; buildInputs = packages.default.buildInputs ++ []; shellHook = '' diff --git a/meson.build b/meson.build index ae3f7c4..12f91a9 100644 --- a/meson.build +++ b/meson.build @@ -24,17 +24,23 @@ common_deps += [util] subdir('src/cache') subdir('src/codec') -subdir('src/buffer') -subdir('src/mixer') -subdir('src/render') -subdir('src/screen') subdir('src/bimu') -subdir('src/libsink') -subdir('src/fruits/sink') -if not get_option('sink-only') +if get_option('sink').enabled() + subdir('src/buffer') + subdir('src/mixer') + subdir('src/render') + subdir('src/screen') + subdir('src/libsink') + subdir('src/fruits/sink') +endif + +if get_option('server').enabled() shoki = subproject('shoki').get_variable('shoki') subdir('src/tree') +endif + +if get_option('client').enabled() subdir('src/libclient') subdir('src/fruits/cmc') endif diff --git a/meson_options.txt b/meson_options.txt index faced59..94fa980 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -1 +1,4 @@ +option('sink', type: 'feature', value: 'enabled') option('sink-only', type: 'boolean', value: true) +option('server', type: 'feature', value: 'disabled') +option('client', type: 'feature', value: 'disabled') diff --git a/scripts/cmv_add.sh b/scripts/cmv_add.sh new file mode 100755 index 0000000..c48c07f --- /dev/null +++ b/scripts/cmv_add.sh @@ -0,0 +1,15 @@ +#! /usr/bin/env bash +CMD="" +for dir in "$@" +do + if [[ $dir == http\://* || $dir == https\://* ]]; then + EXP=$dir + else + EXP=$(realpath -s "`printf '%b' \"$dir\"`") + if [[ ! -f $EXP ]]; then + EXP=";"$dir + fi + fi + CMD="$CMD""$EXP\n" +done +echo -e "$CMD""X" | socat - UNIX-CONNECT:/tmp/tree_sock diff --git a/scripts/run_debug.sh b/scripts/run_debug.sh index bd9a667..8b8b329 100755 --- a/scripts/run_debug.sh +++ b/scripts/run_debug.sh @@ -1,2 +1,2 @@ #! /usr/bin/env sh -gdb -ex run --args ./src/fruits/cmv/cmv "$@" +gdb -ex run --args ./src/fruits/sink/sink "$@" diff --git a/src/bimu/client.c b/src/bimu/client.c index c592906..03910ee 100644 --- a/src/bimu/client.c +++ b/src/bimu/client.c @@ -15,6 +15,7 @@ static void data_connection_callback(void *userdata, struct aki_packet_stream *s aki_packet_write_u8(packet, BIMU_CONNECTION_DATA); aki_packet_write_u16(packet, client->connection_id); aki_packet_write_u16(packet, client->node_id); + aki_packet_write_u64(packet, client->seek_pos); aki_packet_stream_send_packet(&client->data, packet); } @@ -22,62 +23,35 @@ static void send_reconnect_packet(struct bmu_client *client) { struct aki_packet *packet = aki_packet_create(); aki_packet_write_u8(packet, BIMU_CONTROL_RECONNECT); + aki_packet_write_u32(packet, client->level); aki_packet_stream_send_packet(&client->control, packet); } -static void flush_streams(struct bmu_client *client) +static void cleanup_connection_internal(struct bmu_client *client) { - struct bmu_client_stream *stream; - al_array_foreach(client->streams, i, stream) { - stream->client->flush(stream->client); - } + client->callback(client->userdata, BIMU_CLIENT_CLOSED, NULL, NULL); } static void data_connection_closed_callback(void *userdata, struct aki_packet_stream *stream) { struct bmu_client *client = (struct bmu_client *)userdata; (void)stream; + if (client->closed) { + if (!client->control.connected) cleanup_connection_internal(client); + return; + } aki_packet_stream_free(&client->data); client->callback(client->userdata, BIMU_CLIENT_REMOVE_BUFFERS, NULL, NULL); - flush_streams(client); + bmu_vcr_flush(&client->vcr); send_reconnect_packet(client); } -static struct bmu_client_stream *stream_from_index(struct bmu_client *client, s32 index) -{ - struct bmu_client_stream *stream; - al_array_foreach(client->streams, i, stream) { - if (stream->index == index) return stream; - } - return NULL; -} - -static void handle_data_packet_internal(struct bmu_client *client, struct aki_packet *packet) -{ - struct bmu_client_stream *stream; - switch (aki_packet_read_u8(packet)) { - case BIMU_PACKET_DATA: - stream = stream_from_index(client, aki_packet_read_s32(packet)); - stream->client->handle_data_packet(stream->client, packet); - break; - case BIMU_PACKET_EOF: - al_array_foreach(client->streams, i, stream) { - stream->client->handle_eof(stream->client); - } - break; - case BIMU_PACKET_ERROR: - al_log_warn("bimu", "Unhandled error packet."); - break; - } -} - static void data_packet_callback(void *userdata, struct aki_packet_stream *stream, struct aki_packet *packet) { struct bmu_client *client = (struct bmu_client *)userdata; (void)stream; - handle_data_packet_internal(client, packet); - aki_packet_free(packet); + bmu_vcr_push_packet(&client->vcr, packet); } static void packet_sent_callback(void *userdata, struct aki_packet *packet) @@ -106,8 +80,14 @@ static void control_connection_callback(void *userdata, struct aki_packet_stream static void control_connection_closed_callback(void *userdata, struct aki_packet_stream *stream) { - (void)userdata; + struct bmu_client *client = (struct bmu_client *)userdata; (void)stream; + if (client->closed) { + if (!client->data.connected) cleanup_connection_internal(client); + return; + } + aki_packet_stream_free(&client->control); + // TODO: Reconnect. } static void parse_info_packet(struct bmu_client *client, struct aki_packet *packet) @@ -115,7 +95,7 @@ static void parse_info_packet(struct bmu_client *client, struct aki_packet *pack client->duration = aki_packet_read_u64(packet); u32 count = aki_packet_read_u32(packet); for (u32 i = 0; i < count; i++) { - struct bmu_client_stream *stream = al_alloc_object(struct bmu_client_stream); + struct bmu_vcr_stream *stream = al_alloc_object(struct bmu_vcr_stream); stream->client = bmu_codec_client_create(); stream->client->callback = client->callback; stream->client->userdata = client->userdata; @@ -154,7 +134,7 @@ static void parse_info_packet(struct bmu_client *client, struct aki_packet *pack } if (!stream->client->init(stream->client, NULL, stream)) { } - al_array_push(client->streams, stream); + bmu_vcr_add_stream(&client->vcr, stream); } } @@ -172,26 +152,12 @@ static void send_subscribe_packet(struct bmu_client *client) static void parse_start_packet(struct bmu_client *client, struct aki_packet *packet) { - u64 seek_pos = aki_packet_read_u64(packet); u64 ts = aki_packet_read_u64(packet); - u8 paused = aki_packet_read_u8(packet); - (void)paused; - struct bmu_seek_req req = { - .base = seek_pos, - .start = ts - }; - client->callback(client->userdata, BIMU_CLIENT_SET, NULL, &req); -} - -static void parse_resume_packet(struct bmu_client *client, struct aki_packet *packet) -{ + u64 delay = aki_packet_read_u64(packet); u64 seek_pos = aki_packet_read_u64(packet); - u64 ts = aki_packet_read_u64(packet); - struct bmu_seek_req req = { - .base = seek_pos, - .start = ts - }; + struct bmu_seek_req req = { .base = seek_pos, .ts = ts, .delay = delay }; client->callback(client->userdata, BIMU_CLIENT_SET, NULL, &req); + client->seek_pos = req.base; } static void control_packet_callback(void *userdata, struct aki_packet_stream *stream, @@ -213,9 +179,9 @@ static void control_packet_callback(void *userdata, struct aki_packet_stream *st case BIMU_CONTROL_PAUSE: break; case BIMU_CONTROL_RESUME: - //parse_resume_packet(client, packet); break; case BIMU_CONTROL_SEEK: + client->level = 0; client->corked = false; aki_packet_stream_disconnect(&client->data); break; @@ -232,19 +198,22 @@ void bmu_client_connect(struct bmu_client *client, struct aki_event_loop *loop, client->node_id = node_id; al_str_clone(&client->addr, addr); client->port = port; + client->level = 0; client->corked = false; al_array_init(client->subscribed); - al_array_init(client->streams); + bmu_vcr_init(&client->vcr, client->loop, &client->data); aki_packet_stream_init(&client->control, AKI_SOCKET_TCP, control_connection_callback, control_connection_closed_callback, control_packet_callback, packet_sent_callback, client); + aki_packet_stream_set_no_delay(&client->control, 1); aki_packet_stream_connect(&client->control, client->loop, &client->addr, client->port); } -void bmu_client_cork(struct bmu_client *client, bool cork) +void bmu_client_reseek(struct bmu_client *client) { - if (cork == client->corked) return; - aki_packet_stream_cork(&client->data, cork); - client->corked = cork; + client->level++; + al_log_debug("bimu", "Attempting re-seek at level %i.", client->level); + client->corked = false; + aki_packet_stream_disconnect(&client->data); } void bmu_client_seek(struct bmu_client *client, f64 percent) @@ -256,8 +225,22 @@ void bmu_client_seek(struct bmu_client *client, f64 percent) aki_packet_stream_send_packet(&client->control, packet); } +void bmu_client_close(struct bmu_client *client) +{ + struct bmu_vcr_stream *stream; + al_array_foreach(client->vcr.streams, i, stream) { + bmu_vcr_stream_close(stream); + } + client->closed = true; + aki_packet_stream_disconnect(&client->control); + aki_packet_stream_disconnect(&client->data); +} + void bmu_client_free(struct bmu_client *client) { aki_packet_stream_free(&client->control); aki_packet_stream_free(&client->data); + al_str_free(&client->addr); + al_array_free(client->subscribed); + bmu_vcr_free(&client->vcr); } diff --git a/src/bimu/client.h b/src/bimu/client.h index 8c9803b..db1f9e5 100644 --- a/src/bimu/client.h +++ b/src/bimu/client.h @@ -3,14 +3,7 @@ #include <al/types.h> #include <aki/packet_stream.h> -#include "../codec/codec.h" - -struct bmu_client_stream { - u8 type; - s32 index; - struct camu_stream stream; - struct bmu_client_handler *client; -}; +#include "vcr.h" struct bmu_client { struct aki_event_loop *loop; @@ -20,15 +13,19 @@ struct bmu_client { s32 port; struct aki_packet_stream control; struct aki_packet_stream data; + bool closed; + u32 level; bool corked; u64 duration; + u64 seek_pos; array(s32) subscribed; - array(struct bmu_client_stream *) streams; - void (*callback)(void *, u8, struct bmu_client_stream *stream, void *); + struct bmu_vcr vcr; + void (*callback)(void *, u8, struct bmu_vcr_stream *stream, void *); void *userdata; }; void bmu_client_connect(struct bmu_client *client, struct aki_event_loop *loop, str *addr, s32 port, u16 node_id); -void bmu_client_cork(struct bmu_client *client, bool cork); +void bmu_client_reseek(struct bmu_client *client); void bmu_client_seek(struct bmu_client *client, f64 percent); +void bmu_client_close(struct bmu_client *client); void bmu_client_free(struct bmu_client *client); diff --git a/src/bimu/handler.h b/src/bimu/handler.h index 3646dd6..c6b482d 100644 --- a/src/bimu/handler.h +++ b/src/bimu/handler.h @@ -5,6 +5,8 @@ #include "../codec/codec.h" #include "../cache/handle.h" +#include "vcr.h" + struct bmu_server_handler { bool (*init)(struct bmu_server_handler *, struct cch_handle *, struct aki_packet_pool *); void (*write_info)(struct bmu_server_handler *, struct aki_packet *); @@ -32,17 +34,19 @@ enum { }; struct bmu_seek_req { - u64 base, start; + u64 base; + u64 ts; + u64 delay; }; struct bmu_client_stream; struct bmu_client_handler { - bool (*init)(struct bmu_client_handler *, struct camu_renderer *, struct bmu_client_stream *); + bool (*init)(struct bmu_client_handler *, struct camu_renderer *, struct bmu_vcr_stream *); void (*handle_data_packet)(struct bmu_client_handler *, struct aki_packet *); void (*handle_eof)(struct bmu_client_handler *); void (*flush)(struct bmu_client_handler *); void (*free)(struct bmu_client_handler **); - struct bmu_client_stream *stream; - void (*callback)(void *, u8, struct bmu_client_stream *stream, void *); + struct bmu_vcr_stream *stream; + void (*callback)(void *, u8, struct bmu_vcr_stream *stream, void *); void *userdata; }; diff --git a/src/bimu/handlers/codec_client.c b/src/bimu/handlers/codec_client.c index 570ef97..79ef27d 100644 --- a/src/bimu/handlers/codec_client.c +++ b/src/bimu/handlers/codec_client.c @@ -2,7 +2,7 @@ #include "../../codec/libav/decoder.h" #include "../../codec/libav/packet_ext.h" -#include "../../bimu/client.h" +#include "../../bimu/vcr.h" #include "codec.h" @@ -13,7 +13,7 @@ static void data_callback(void *userdata, struct camu_frame *frame) } static bool codec_client_init(struct bmu_client_handler *handler, struct camu_renderer *renderer, - struct bmu_client_stream *stream) + struct bmu_vcr_stream *stream) { struct bmu_codec_client *codec = (struct bmu_codec_client *)handler; codec->dec = camu_lav_decoder_create(); diff --git a/src/bimu/meson.build b/src/bimu/meson.build index dce7f7b..c7de266 100644 --- a/src/bimu/meson.build +++ b/src/bimu/meson.build @@ -5,6 +5,7 @@ bimu_server_src = [ bimu_client_src = [ 'client.c', + 'vcr.c', 'handlers/codec_client.c' ] diff --git a/src/bimu/server.c b/src/bimu/server.c index e1aedce..6db0dd2 100644 --- a/src/bimu/server.c +++ b/src/bimu/server.c @@ -4,9 +4,7 @@ #include "handlers/codec.h" #include "server.h" - -#define START_DELAY 3000000 // 3s -#define DELAY_GIVE 200000 // 200ms +#include "common.h" static void control_connection_closed_callback(void *userdata, struct aki_packet_stream *stream) { @@ -21,6 +19,9 @@ static void control_connection_closed_callback(void *userdata, struct aki_packet } aki_packet_stream_free(connection->control); connection->control = NULL; + //cch_entry_return_handle(connection->node->entry, &connection->handle); + //connection->handler->free(&connection->handler); + //aki_packet_pool_free(&connection->pool); } static void data_connection_closed_callback(void *userdata, struct aki_packet_stream *stream) @@ -81,31 +82,33 @@ static void send_pause_packet(struct bmu_node_connection *connection, u64 seek_p aki_packet_stream_send_packet(connection->control, packet); } -static void send_start_packet(struct bmu_node_connection *connection) +#define DELAY 275000Lu // 275ms +#define DELAY_GIVE 30000Lu // 30ms + +static void send_start_packet(struct bmu_node_connection *connection, u32 level) { struct aki_packet *packet = aki_packet_create(); aki_packet_write_u8(packet, BIMU_CONTROL_START); - u64 ts = aki_get_timestamp() - START_DELAY; + u64 ts = aki_get_timestamp(); + u64 delay = DELAY * powl(3, level); u64 seek_pos = connection->node->seek_pos; - if (!connection->node->paused) { - if (connection->node->start >= 0) { + if (!(connection->node->flags & BIMU_NODE_PAUSED)) { + if (connection->node->flags & BIMU_NODE_STARTED) { if ((ts - DELAY_GIVE) < (u64)connection->node->start) { + // Current time is close enough to node start. ts = connection->node->start; } else { - seek_pos += ts - connection->node->start; + seek_pos += (ts - connection->node->start) + (delay - DELAY); } } else { + // Must be set at level 0, this applies for seeks too. connection->node->start = ts; + connection->node->flags |= BIMU_NODE_STARTED; } } - u64 duration = connection->handler->get_duration(connection->handler); - if (seek_pos > duration) seek_pos = duration; - // -1 signals to not call seek. We have to distinguish between a seek to 0 - // and the start of a stream. - connection->seek_pos = seek_pos > 0 ? seek_pos : -1; - aki_packet_write_u64(packet, seek_pos); aki_packet_write_u64(packet, ts); - aki_packet_write_u8(packet, connection->node->paused); + aki_packet_write_u64(packet, delay); + aki_packet_write_u64(packet, seek_pos); aki_packet_stream_send_packet(connection->control, packet); } @@ -131,11 +134,11 @@ static void control_packet_callback(void *userdata, struct aki_packet_stream *st for (u32 i = 0; i < count; i++) { connection->handler->subscribe(connection->handler, aki_packet_read_s32(packet), true); } - send_start_packet(connection); + send_start_packet(connection, 0); break; } case BIMU_CONTROL_RECONNECT: { - send_start_packet(connection); + send_start_packet(connection, aki_packet_read_u32(packet)); break; } case BIMU_CONTROL_TOGGLE_PAUSE: { @@ -144,13 +147,10 @@ static void control_packet_callback(void *userdata, struct aki_packet_stream *st u8 paused = connection->paused; if (paused == BIMU_PLAYING) { node->seek_pos = pos; - node->paused = true; - // If node is paused, start will not be used for new connections. - // So, set it to -1 and update it on the first resume from any connection. - node->start = -1; + node->flags |= BIMU_NODE_PAUSED; + // Update node start? } else if (paused == BIMU_PAUSED_AND_RUNNING) { - node->paused = false; - node->start = aki_get_timestamp() - START_DELAY; + node->flags &= ~BIMU_NODE_PAUSED; } struct bmu_node_connection *rconnection; al_array_foreach(node->connections, i, rconnection) { @@ -180,8 +180,8 @@ static void control_packet_callback(void *userdata, struct aki_packet_stream *st case BIMU_CONTROL_SEEK: { u64 pos = aki_packet_read_u64(packet); connection->node->seek_pos = pos; - connection->node->start = -1; - connection->seek_pos = pos; + connection->node->flags |= BIMU_NODE_SEEKED; + connection->node->flags &= ~BIMU_NODE_STARTED; send_seek_packet(connection->node); break; } @@ -228,7 +228,8 @@ static aki_thread_result AKI_THREADCALL handler_thread(void *userdata) static void maybe_start_handler(struct bmu_node_connection *connection) { al_assert(!connection->running); - if (connection->seek_pos >= 0) { + // Don't seek to 0 unless NODE_SEEKED is set. + if (connection->seek_pos > 0 || (connection->node->flags & BIMU_NODE_SEEKED)) { connection->handler->seek(connection->handler, connection->seek_pos); } connection->running = 1; @@ -279,7 +280,7 @@ static void identify_packet_callback(void *userdata, struct aki_packet_stream *s switch (type) { case BIMU_CONNECTION_CONTROL: - aki_packet_stream_set_no_delay(stream, true); + aki_packet_stream_set_no_delay(stream, 1); connection->control = stream; stream->packet_callback = control_packet_callback; stream->packet_sent_callback = default_packet_sent_callback; @@ -293,6 +294,7 @@ static void identify_packet_callback(void *userdata, struct aki_packet_stream *s // (disconnect and reconnect very fast?). // - Call maybe_cleanup_data in this function? al_assert(!connection->data); + connection->seek_pos = aki_packet_read_u64(packet); connection->data = stream; stream->packet_callback = data_packet_callback; stream->packet_sent_callback = packet_sent_callback; @@ -339,8 +341,8 @@ u16 bmu_server_create_node(struct bmu_server *server, struct cch_entry *entry) al_array_push(server->nodes, node); node->id = al_rand_u16(); node->entry = entry; - node->paused = false; - node->start = -1; + node->flags = 0; + node->start = 0; node->seek_pos = 0; node->connection_id = 1; al_array_init(node->connections); diff --git a/src/bimu/server.h b/src/bimu/server.h index 09fed99..20f73c6 100644 --- a/src/bimu/server.h +++ b/src/bimu/server.h @@ -7,7 +7,6 @@ #include "../cache/entry.h" #include "../cache/handle.h" -#include "common.h" #include "handler.h" enum { @@ -31,10 +30,16 @@ struct bmu_node_connection { struct aki_thread thread; }; +enum { + BIMU_NODE_STARTED = 1, + BIMU_NODE_SEEKED = 1 << 1, + BIMU_NODE_PAUSED = 1 << 2 +}; + struct bmu_node { u16 id; struct cch_entry *entry; - bool paused; + u8 flags; u64 start; u64 seek_pos; u16 connection_id; diff --git a/src/bimu/vcr.c b/src/bimu/vcr.c new file mode 100644 index 0000000..6c39d86 --- /dev/null +++ b/src/bimu/vcr.c @@ -0,0 +1,166 @@ +#include <al/log.h> + +#include "vcr.h" +#include "handler.h" + +static void signal_callback(void *userdata) +{ + struct bmu_vcr *vcr = (struct bmu_vcr *)userdata; + aki_packet_stream_cork(vcr->data, false); +} + +void bmu_vcr_init(struct bmu_vcr *vcr, struct aki_event_loop *loop, struct aki_packet_stream *data) +{ + al_array_init(vcr->streams); + al_atomic_u64_store(&vcr->count, 0, AL_ATOMIC_RELAXED); + vcr->data = data; + aki_signal_init(&vcr->signal, signal_callback, vcr); + aki_signal_start(&vcr->signal, loop); +} + +static aki_thread_result AKI_THREADCALL vcr_stream_thread(void *userdata) +{ + struct bmu_vcr_stream *stream = (struct bmu_vcr_stream *)userdata; + struct bmu_vcr *vcr = stream->vcr; + do { + if (!aki_packet_cache_wait(&stream->cache)) break; + struct aki_packet *packet = aki_packet_cache_pop(&stream->cache); + if (!packet) { + stream->client->handle_eof(stream->client); + break; + } + if (al_atomic_u64_sub(&vcr->count, 1, AL_ATOMIC_RELAXED) < 128 && stream->buffered) { + aki_signal_send(&vcr->signal); + } + if (al_atomic_s32_load(&stream->state, AL_ATOMIC_RELAXED) == BIMU_STREAM_STOPPED) { + aki_mutex_lock(&stream->mutex); + aki_cond_wait(&stream->cond, &stream->mutex); + aki_mutex_unlock(&stream->mutex); + } + if (al_atomic_s32_load(&stream->state, AL_ATOMIC_RELAXED) == BIMU_STREAM_CLOSED) { + aki_packet_free(packet); + break; + } + stream->client->handle_data_packet(stream->client, packet); + aki_packet_free(packet); + } while (1); + return 0; +} + +void bmu_vcr_add_stream(struct bmu_vcr *vcr, struct bmu_vcr_stream *stream) +{ + stream->vcr = vcr; + aki_cond_init(&stream->cond); + aki_mutex_init(&stream->mutex); + aki_packet_cache_init(&stream->cache, 256); + stream->buffered = false; + al_array_push(vcr->streams, stream); + al_atomic_s32_store(&stream->state, BIMU_STREAM_RUNNING, AL_ATOMIC_RELAXED); +} + +static struct bmu_vcr_stream *get_stream_from_index(struct bmu_vcr *vcr, s32 index) +{ + struct bmu_vcr_stream *stream; + al_array_foreach(vcr->streams, i, stream) { + if (stream->index == index) return stream; + } + return NULL; +} + +bool bmu_vcr_push_packet(struct bmu_vcr *vcr, struct aki_packet *packet) +{ + struct bmu_vcr_stream *stream; + switch (aki_packet_read_u8(packet)) { + case BIMU_PACKET_DATA: + stream = get_stream_from_index(vcr, aki_packet_read_s32(packet)); + al_assert(stream); + if (!stream->running) { + aki_thread_create(&stream->thread, vcr_stream_thread, stream); + stream->running = true; + } + if (!aki_packet_cache_send_packet(&stream->cache, packet)) { + aki_packet_free(packet); + } else if (al_atomic_u64_add(&vcr->count, 1, AL_ATOMIC_RELAXED) >= 196) { + aki_packet_stream_cork(vcr->data, true); + al_array_foreach(vcr->streams, i, stream) { + stream->buffered = true; + } + } + break; + case BIMU_PACKET_EOF: + al_array_foreach(vcr->streams, i, stream) { + aki_packet_cache_send_packet(&stream->cache, NULL); + } + aki_packet_free(packet); + break; + case BIMU_PACKET_ERROR: + aki_packet_free(packet); + al_log_warn("bimu", "Unhandled error packet."); + break; + } + return true; +} + +static void vcr_stream_close_internal(struct bmu_vcr_stream *stream) +{ + al_atomic_s32_store(&stream->state, BIMU_STREAM_CLOSED, AL_ATOMIC_RELAXED); + aki_packet_cache_disable(&stream->cache); + aki_mutex_lock(&stream->mutex); + if (aki_cond_is_waiting(&stream->cond)) { + aki_cond_signal(&stream->cond); + } + aki_mutex_unlock(&stream->mutex); + aki_thread_join(&stream->thread); + struct aki_packet *packet; + while ((packet = aki_packet_cache_pop(&stream->cache))) { + aki_packet_free(packet); + } +} + +void bmu_vcr_stream_close(struct bmu_vcr_stream *stream) +{ + vcr_stream_close_internal(stream); +} + +void bmu_vcr_flush(struct bmu_vcr *vcr) +{ + struct bmu_vcr_stream *stream; + al_array_foreach(vcr->streams, i, stream) { + vcr_stream_close_internal(stream); + stream->client->flush(stream->client); + aki_packet_cache_enable(&stream->cache); + stream->running = false; + al_atomic_s32_store(&stream->state, BIMU_STREAM_RUNNING, AL_ATOMIC_RELAXED); + } + al_atomic_u64_store(&vcr->count, 0, AL_ATOMIC_RELAXED); +} + +void bmu_vcr_stream_cork(struct bmu_vcr_stream *stream) +{ + al_atomic_s32_store(&stream->state, BIMU_STREAM_STOPPED, AL_ATOMIC_RELAXED); +} + +void bmu_vcr_stream_uncork(struct bmu_vcr_stream *stream) +{ + al_atomic_s32_store(&stream->state, BIMU_STREAM_RUNNING, AL_ATOMIC_RELAXED); + aki_mutex_lock(&stream->mutex); + if (aki_cond_is_waiting(&stream->cond)) { + aki_cond_signal(&stream->cond); + } + aki_mutex_unlock(&stream->mutex); +} + +void bmu_vcr_free(struct bmu_vcr *vcr) +{ + aki_signal_stop(&vcr->signal); + struct bmu_vcr_stream *stream; + al_array_foreach(vcr->streams, i, stream) { + aki_packet_cache_free(&stream->cache); + stream->client->free(&stream->client); + if (stream->stream.type == CAMU_FFMPEG_COMPAT) { + avformat_free_context(stream->stream.av.format_context); + } + al_free(stream); + } + al_array_free(vcr->streams); +} diff --git a/src/bimu/vcr.h b/src/bimu/vcr.h new file mode 100644 index 0000000..5a6d8d5 --- /dev/null +++ b/src/bimu/vcr.h @@ -0,0 +1,45 @@ +#pragma once + +#include <aki/packet_cache.h> +#include <al/atomic.h> +#include <aki/packet_stream.h> +#include <aki/signal.h> + +#include "../codec/codec.h" + +enum { + BIMU_STREAM_RUNNING = 0, + BIMU_STREAM_STOPPED, + BIMU_STREAM_CLOSED +}; + +struct bmu_vcr_stream { + u8 type; + s32 index; + struct camu_stream stream; + struct bmu_client_handler *client; + atomic_s32 state; + struct aki_packet_cache cache; + bool buffered; + struct aki_cond cond; + struct aki_mutex mutex; + bool running; + struct aki_thread thread; + struct bmu_vcr *vcr; +}; + +struct bmu_vcr { + array(struct bmu_vcr_stream *) streams; + atomic_u64 count; + struct aki_packet_stream *data; + struct aki_signal signal; +}; + +void bmu_vcr_init(struct bmu_vcr *vcr, struct aki_event_loop *loop, struct aki_packet_stream *data); +void bmu_vcr_add_stream(struct bmu_vcr *vcr, struct bmu_vcr_stream *stream); +bool bmu_vcr_push_packet(struct bmu_vcr *vcr, struct aki_packet *packet); +void bmu_vcr_stream_close(struct bmu_vcr_stream *stream); +void bmu_vcr_flush(struct bmu_vcr *vcr); +void bmu_vcr_stream_cork(struct bmu_vcr_stream *stream); +void bmu_vcr_stream_uncork(struct bmu_vcr_stream *stream); +void bmu_vcr_free(struct bmu_vcr *vcr); diff --git a/src/buffer/audio.c b/src/buffer/audio.c index ffb10dc..3daeee2 100644 --- a/src/buffer/audio.c +++ b/src/buffer/audio.c @@ -1,17 +1,19 @@ #include <al/log.h> #include "audio.h" +#include "common.h" #define BUFFER_USEC (12 * 1000000L) #define BUFFER_WATERMARK_LOW (3 * 1000000L) // Must be a most half of the buffer size. -#define BUFFER_WATERMARK_HIGH (0.75 * 1000000L) +#define BUFFER_WATERMARK_HIGH (4 * 1000000L) #define DESYNC_PTS 0.022 #ifdef CAMU_AUDIO_BUFFER_FADE #define FADE 1.0 -#define FADE_LENGTH 6 -#define FADE_STEP(rate) ((FADE / ((f64)rate)) / (FADE_LENGTH - 1.0)) +#define FADE_LENGTH 18000 +#define FADE_STEP(rate) (FADE / FADE_LENGTH) +//#define FADE_STEP(rate) ((FADE / FADE_LENGTH) / (FADE_LENGTH - 1.0)) #endif enum { @@ -22,7 +24,7 @@ enum { enum { PAUSE_PRE = 0, - PAUSE_UNPAUSED, + PAUSE_PAUSED, #ifdef CAMU_AUDIO_BUFFER_FADE PAUSE_FADING, #endif @@ -33,7 +35,8 @@ static bool setup_optimal_resampler(struct camu_audio_buffer *buf, struct camu_l struct camu_lav_resample_fmt *fmt) { /* - switch ((enum AVSampleFormat)fmt->in_format) { + sw + // Update node start?itch ((enum AVSampleFormat)fmt->in_format) { case AV_SAMPLE_FMT_S16P: fmt->req_format = AV_SAMPLE_FMT_S16; break; @@ -56,9 +59,11 @@ static bool setup_optimal_resampler(struct camu_audio_buffer *buf, struct camu_l } fmt->req_format = fmt->in_format; + fmt->req_channel_count = fmt->in_channel_count; fmt->req_sample_rate = fmt->in_sample_rate; */ + //buf->fade_rate = buf->fmt.req_sample_rate / 10; buf->fade_rate = buf->fmt.req_sample_rate / 10; buf->bytes_per_sample = (s32)camu_lav_resample_fmt_bytes_per_sample(fmt); @@ -70,9 +75,9 @@ bool camu_audio_buffer_init(struct camu_audio_buffer *buf, struct camu_clock *cl { buf->mixer = mixer; buf->clock = clock; - buf->buffered = false; buf->pause = PAUSE_PRE; buf->ignore_desync = false; + buf->buffered = false; #ifdef CAMU_AUDIO_BUFFER_FADE buf->fade_period = 0; buf->fade_offset = 0; @@ -93,7 +98,6 @@ bool camu_audio_buffer_configure(struct camu_audio_buffer *buf, struct camu_stre buf->fmt.in_sample_rate = stream->av.stream->codecpar->sample_rate; camu_mixer_pick_format(buf->mixer, &buf->fmt); - av_channel_layout_default(&buf->fmt.req_channel_layout, buf->fmt.req_channel_count); if (!setup_optimal_resampler(buf, &buf->resamp, &buf->fmt)) { return false; } @@ -142,8 +146,7 @@ static bool push_internal(struct camu_audio_buffer *buf, u8 **data, s32 sample_c camu_peak_buffer_push(&buf->peak, data[0], have); if (peak >= buf->watermark.low) { // Discard the peak buffer. If this happens the user of this buffer is - // taking _way_ too long to stop. We could attempt to recover by - // re-seeking the whole stream. + // taking _way_ too long to stop. camu_peak_buffer_flush(&buf->peak, &size); } // Continuing based on an outdated continue_mark value is safe as long as the @@ -167,12 +170,13 @@ static bool push_internal(struct camu_audio_buffer *buf, u8 **data, s32 sample_c #ifdef HAVE_FFMPEG static void push_av_frame_internal(struct camu_audio_buffer *buf, AVFrame *frame) { + // It doesn't matter if there's a race here with flush(), as long + // as any frame is from the same stream. + // A reset() must finish before any data is pushed. if (al_atomic_u8_load(&buf->flow, AL_ATOMIC_RELAXED) == FLOWING) { - u8 **data = frame->data; - s32 sample_count = frame->nb_samples; AVStream *stream = buf->stream->av.stream; f64 pts = (frame->best_effort_timestamp - stream->start_time) * av_q2d(stream->time_base); - push_internal(buf, data, sample_count, pts); + push_internal(buf, frame->data, frame->nb_samples, pts); } av_frame_free(&frame); } @@ -198,8 +202,8 @@ void camu_audio_buffer_reset(struct camu_audio_buffer *buf) al_atomic_size_t_store(&buf->continue_mark, 0, AL_ATOMIC_RELAXED); al_atomic_u8_store(&buf->flow, FLOWING, AL_ATOMIC_RELAXED); buf->pts = camu_clock_get_base_pts(buf->clock) + camu_mixer_get_latency(buf->mixer); - buf->buffered = false; buf->pause = PAUSE_PRE; + buf->buffered = false; al_ring_buffer_reset(&buf->rb); } @@ -248,45 +252,48 @@ static void handle_fade(struct camu_audio_buffer *buf, u8 *data, size_t size, bo if ((i + 1) % channel_count == 0) { if (out) buf->volume = AL_CLAMP((buf->volume - FADE_STEP(buf->fade_rate)), 0.0, 1.0); else buf->volume = AL_CLAMP((buf->volume + FADE_STEP(buf->fade_rate)), 0.0, 1.0); + if (buf->fade_period > 0) buf->fade_period--; } data += buf->bytes_per_sample; } } #endif -#define NOT_UNPAUSED(pause) (pause != PAUSE_UNPAUSED && pause != PAUSE_PRE) +#define NOT_PAUSED(pause) (pause != PAUSE_PAUSED && pause != PAUSE_PRE) +// PAUSE_PAUSED means the last read was silence, meaning it's safe to skip. +// The sole purpose of PAUSE_PRE is to avoid a fade in at the start of the stream. size_t camu_audio_buffer_read(struct camu_audio_buffer *buf, u8 *data, size_t req) { - f64 pts = camu_clock_get_pts(buf->clock); + f64 pts = camu_clock_get_pts(buf->clock, camu_mixer_get_latency(buf->mixer)); if (pts < 0.0) { #ifdef CAMU_AUDIO_BUFFER_FADE if (buf->pause == PAUSE_PLAYING) { - // Fade out. Signified by >0 fade_period and PAUSE_FADING. + // Fade out. Signified by >0 fade_period and pause = PAUSE_FADING. buf->volume = FADE; buf->fade_period = FADE_LENGTH; buf->fade_offset = 0; buf->pause = PAUSE_FADING; - } else if (buf->fade_period == 0) { + } else if (buf->fade_period == 0) { // Fade out done. al_memset(data, 0, req); - if (NOT_UNPAUSED(buf->pause)) { - buf->pause = PAUSE_UNPAUSED; + if (NOT_PAUSED(buf->pause)) { + buf->pause = PAUSE_PAUSED; buf->callback(buf->userdata, CAMU_BUFFER_PAUSED); } return req; } - } else if (buf->pause == PAUSE_FADING || buf->pause == PAUSE_UNPAUSED) { - // Fade in. Signified by >0 fade_period and PAUSE_PLAYING. + } else if (buf->pause == PAUSE_FADING || buf->pause == PAUSE_PAUSED) { + // Fade in. Signified by >0 fade_period and pause = PAUSE_PLAYING. buf->volume = 1.0 - FADE; buf->fade_period = FADE_LENGTH; buf->fade_offset = 0; // We don't want to consider sync if reversing an active - // fade but we do if PAUSE_UNPAUSED. + // fade but we do if pause = PAUSE_PAUSED. if (buf->pause == PAUSE_FADING) buf->pause = PAUSE_PLAYING; #else al_memset(data, 0, req); - if (NOT_UNPAUSED(buf->pause)) { - buf->pause = PAUSE_UNPAUSED; + if (NOT_PAUSED(buf->pause)) { + buf->pause = PAUSE_PAUSED; buf->callback(buf->userdata, CAMU_BUFFER_PAUSED); } return req; @@ -294,15 +301,16 @@ size_t camu_audio_buffer_read(struct camu_audio_buffer *buf, u8 *data, size_t re } size_t ret, signal = req; size_t size = al_ring_buffer_occupied(&buf->rb); + // Cut off fade if it's reaching too far. if (size < buf->fade_offset) size = 0; else size -= buf->fade_offset; #ifdef CAMU_AUDIO_BUFFER_FADE - if (buf->pause != PAUSE_FADING) { + if (buf->pause != PAUSE_FADING && buf->pause != PAUSE_PLAYING) { #endif pts -= buf->pts; - // We can assume a call to audio_buffer_read will happen before - // the user NEEDS the data, so, we can't accurately assess the sync here. - if (UNLIKELY(!buf->ignore_desync && (buf->pause == PAUSE_PRE || buf->pause == PAUSE_UNPAUSED))) { + // Possibly attempt syncing to the clock. For this to work the mixer must + // report a reasonably accurate value for latency. + if (UNLIKELY(!buf->ignore_desync && (buf->pause == PAUSE_PRE || buf->pause == PAUSE_PAUSED))) { if (fabs(pts) >= 0.322) { al_log_warn("audio_buffer", "Abnormally large audio desync of %.5fs", pts); } @@ -330,31 +338,42 @@ size_t camu_audio_buffer_read(struct camu_audio_buffer *buf, u8 *data, size_t re } #endif u8 flow = al_atomic_u8_load(&buf->flow, AL_ATOMIC_RELAXED); - if (size < req) { + if (size < req) { // We don't have enough data to fulfill our request. if (flow == FLUSHED) { + // If flow = FLUSHED, we know we've recieved all the data + // this stream wants to send. Signal that we are done. signal = size; al_atomic_u8_store(&buf->flow, SIGNALED, AL_ATOMIC_RELAXED); al_log_debug("audio_buffer", "Flushed (signal: %zu).", signal); buf->callback(buf->userdata, CAMU_BUFFER_EOF); } else { + // Put silence into the remainder of the request buffer. al_memset(data + size, 0, req - size); if (flow == FLOWING) { + // Our stream hit an underrun because data wasn't coming in fast + // enough. It's also possible to underrun if this function takes too + // long which isn't checked here. That is unlikely though. al_log_warn("audio_buffer", "Underrun (req: %zu, have: %zu).", req, size); } + // If flow = SIGNALED, we are just waiting to be removed or reset. } req = size; } if (req > 0) { #ifdef CAMU_AUDIO_BUFFER_FADE if (buf->pause == PAUSE_FADING) { + // Peek into the ring buffer. This won't consume the data, so when + // we resume it will fade in from the same position the fade out started. ret = al_ring_buffer_peek(&buf->rb, data, buf->fade_offset, req); buf->fade_offset += ret; } else { #endif + // Read as much as we can from the ring buffer. ret = al_ring_buffer_read(&buf->rb, data, req); buf->pts += camu_lav_resample_fmt_bytes_to_sec(&buf->fmt, ret); if (flow == FLOWING) { ret = al_atomic_size_t_load(&buf->continue_mark, AL_ATOMIC_RELAXED); + // Request to uncork if we are below the mark. if (ret && ((buf->size - size) - req) >= ret) { buf->callback(buf->userdata, CAMU_BUFFER_UNCORK); } @@ -362,11 +381,11 @@ size_t camu_audio_buffer_read(struct camu_audio_buffer *buf, u8 *data, size_t re #ifdef CAMU_AUDIO_BUFFER_FADE } if (buf->fade_period > 0) { - buf->fade_period--; handle_fade(buf, data, req, buf->pause == PAUSE_FADING); } #endif } + // Never return less than req, unless we hit the end of the stream. return signal; } diff --git a/src/buffer/audio.h b/src/buffer/audio.h index 7bd30a2..1a8baf0 100644 --- a/src/buffer/audio.h +++ b/src/buffer/audio.h @@ -6,13 +6,11 @@ #include "../codec/codec.h" #include "../codec/libav/resampler.h" #include "../mixer/mixer.h" -#include "../mixer/audio.h" #include "clock.h" -#include "common.h" #include "peak_buffer.h" -#define CAMU_AUDIO_BUFFER_FADE +//#define CAMU_AUDIO_BUFFER_FADE struct camu_audio_buffer { struct camu_stream *stream; diff --git a/src/buffer/clock.c b/src/buffer/clock.c index a1c3e83..1e7883c 100644 --- a/src/buffer/clock.c +++ b/src/buffer/clock.c @@ -2,26 +2,38 @@ #include "clock.h" -void camu_clock_set(struct camu_clock *clock, u64 base, u64 start) +void camu_clock_set(struct camu_clock *clock, u64 base, u64 ts, u64 delay) { al_atomic_f64_store(&clock->base, base / 1000000.f, AL_ATOMIC_RELAXED); al_atomic_f64_store(&clock->tick, 0.0, AL_ATOMIC_RELAXED); - al_atomic_u64_store(&clock->start, start, AL_ATOMIC_RELAXED); - camu_clock_resume(clock); + al_atomic_u64_store(&clock->start, ts, AL_ATOMIC_RELAXED); + clock->delay = delay; } -void camu_clock_resume(struct camu_clock *clock) +bool camu_clock_calc_tick(struct camu_clock *clock) { - u64 start = al_atomic_u64_load(&clock->start, AL_ATOMIC_ACQUIRE); - if (start == 0L) return; - u64 ts = aki_get_timestamp(); - al_assert(start < ts); - f64 diff = (ts - start) / 1000000.f; + u64 start = al_atomic_u64_load(&clock->start, AL_ATOMIC_RELAXED); + if (start == 0L) return false; + u64 ts = clock->delay == 0 ? start : aki_get_timestamp(); + al_assert(start <= ts); + u64 diff = ts - start; f64 tick = al_atomic_f64_load(&clock->tick, AL_ATOMIC_RELAXED); if (tick == 0.0) { + if (!(diff >= clock->delay && clock->delay >= (diff - clock->delay))) { + // We are past the requested start time. + return false; + } + diff = clock->delay - (diff - clock->delay); tick = aki_get_tick() - al_atomic_f64_load(&clock->base, AL_ATOMIC_RELAXED); } - al_atomic_f64_store(&clock->tick, tick + diff, AL_ATOMIC_RELAXED); + al_atomic_f64_store(&clock->tick, tick + (diff / 1000000.f), AL_ATOMIC_RELAXED); + return true; +} + +void camu_clock_resume(struct camu_clock *clock) +{ + u64 start = al_atomic_u64_load(&clock->start, AL_ATOMIC_ACQUIRE); + if (start == 0L) return; al_atomic_u64_store(&clock->start, 0L, AL_ATOMIC_RELEASE); } @@ -39,13 +51,6 @@ void camu_clock_pause(struct camu_clock *clock) al_atomic_u64_store(&clock->start, aki_get_timestamp(), AL_ATOMIC_RELEASE); } -void camu_clock_seek(struct camu_clock *clock, u64 base, u64 start) -{ - (void)clock; - (void)base; - (void)start; -} - bool camu_clock_is_paused(struct camu_clock *clock) { u64 start = al_atomic_u64_load(&clock->start, AL_ATOMIC_RELAXED); @@ -57,12 +62,12 @@ f64 camu_clock_get_base_pts(struct camu_clock *clock) return al_atomic_f64_load(&clock->base, AL_ATOMIC_RELAXED); } -f64 camu_clock_get_pts(struct camu_clock *clock) +f64 camu_clock_get_pts(struct camu_clock *clock, f64 offset) { u64 start = al_atomic_u64_load(&clock->start, AL_ATOMIC_RELAXED); if (start != 0L) return -1.0; f64 base = al_atomic_f64_load(&clock->base, AL_ATOMIC_RELAXED); - f64 pts = get_pts_internal(clock); + f64 pts = get_pts_internal(clock) + offset; if (pts < base) return -1.0; return pts; } diff --git a/src/buffer/clock.h b/src/buffer/clock.h index e39a963..a7399b5 100644 --- a/src/buffer/clock.h +++ b/src/buffer/clock.h @@ -6,12 +6,13 @@ struct camu_clock { atomic_f64 base, tick; atomic_u64 start; + u64 delay; }; -void camu_clock_set(struct camu_clock *clock, u64 base, u64 start); +void camu_clock_set(struct camu_clock *clock, u64 base, u64 ts, u64 delay); +bool camu_clock_calc_tick(struct camu_clock *clock); void camu_clock_resume(struct camu_clock *clock); void camu_clock_pause(struct camu_clock *clock); -void camu_clock_seek(struct camu_clock *clock, u64 base, u64 start); bool camu_clock_is_paused(struct camu_clock *clock); f64 camu_clock_get_base_pts(struct camu_clock *clock); -f64 camu_clock_get_pts(struct camu_clock *clock); +f64 camu_clock_get_pts(struct camu_clock *clock, f64 offset); diff --git a/src/buffer/video.c b/src/buffer/video.c index 26e84b0..9a04933 100644 --- a/src/buffer/video.c +++ b/src/buffer/video.c @@ -4,17 +4,17 @@ //#define CAMU_VIDEO_BUFFER_FORCE_SCALER -#define BUFFER_WATERMARK_LOW 16 // frames. -#define BUFFER_WATERMARK_BUFFERED 12 -#define BUFFER_WATERMARK_HIGH 28 -#define BUFFER_WATERMARK_RESET BUFFER_WATERMARK_HIGH + 16. +#define BUFFER_WATERMARK_LOW 8 // frames. +#define BUFFER_WATERMARK_BUFFERED 10 +#define BUFFER_WATERMARK_HIGH 14 +#define BUFFER_WATERMARK_RESET BUFFER_WATERMARK_HIGH + 10. bool camu_video_buffer_init(struct camu_video_buffer *buf, struct camu_clock *clock, struct camu_renderer *renderer) { + buf->clock = clock; buf->queue = renderer->create_queue(renderer); buf->buffered = false; - buf->clock = clock; #ifdef CAMU_SCREEN_THREADED al_atomic_bool_store(&buf->ref, false, AL_ATOMIC_RELAXED); #endif @@ -132,11 +132,15 @@ bool camu_video_buffer_is_single_frame(struct camu_video_buffer *buf) void camu_video_buffer_flush(struct camu_video_buffer *buf) { buf->queue->flush(buf->queue); + if (!buf->buffered) { + buf->callback(buf->userdata, CAMU_BUFFER_BUFFERED); + buf->buffered = true; + } } bool camu_video_buffer_read(struct camu_video_buffer *buf, void *out) { - f64 pts = buf->single_frame ? 0.0 : camu_clock_get_pts(buf->clock); + f64 pts = buf->single_frame ? 0.0 : camu_clock_get_pts(buf->clock, 0); if (pts < 0.0) pts = camu_clock_get_base_pts(buf->clock); u8 ret = buf->queue->read(buf->queue, pts, out); if (ret == CAMU_QUEUE_EOF || (ret == CAMU_QUEUE_OK && buf->single_frame)) { diff --git a/src/codec/libav/decoder.c b/src/codec/libav/decoder.c index ebdcb03..3a6ac06 100644 --- a/src/codec/libav/decoder.c +++ b/src/codec/libav/decoder.c @@ -38,11 +38,13 @@ static bool lav_decoder_init(struct camu_decoder *dec, struct camu_renderer *ren goto err; } + /* s32 cpus = av_cpu_count(); cpus = (cpus > 16) ? 4 : cpus / 4; if (cpus == 0) cpus = 1; av->codec_context->thread_count = cpus; al_log_debug("lav_decoder", "Using %i threads for decoder.", cpus); + */ (void)renderer; /* diff --git a/src/codec/libav/demuxer.c b/src/codec/libav/demuxer.c index 18b9020..fb05ec8 100644 --- a/src/codec/libav/demuxer.c +++ b/src/codec/libav/demuxer.c @@ -83,9 +83,7 @@ static bool lav_demuxer_init(struct camu_demuxer *demux, struct cch_handle *hand } al_log_info("lav_demux", "Setting stream #%i to a duration of %.3fs.", i, stream->duration * av_q2d(stream->time_base)); } - if (stream->start_time < 0) { - al_log_warn("lav_demux", "Stream has a negative start_time (%ld).", stream->start_time); - } + if (stream->start_time < 0) stream->start_time = 0; s64 duration = av_rescale_q(stream->duration, stream->time_base, AV_TIME_BASE_Q); al_assert(duration >= 0); if ((u64)duration > av->duration) av->duration = (u64)duration; diff --git a/src/codec/libav/resampler.c b/src/codec/libav/resampler.c index ba700f4..229c68c 100644 --- a/src/codec/libav/resampler.c +++ b/src/codec/libav/resampler.c @@ -8,40 +8,38 @@ #include "resampler.h" -static bool in_req_match(struct camu_lav_resample_fmt *fmt) +static bool in_req_matches(struct camu_lav_resample_fmt *fmt) { - return (av_channel_layout_compare(&fmt->in_channel_layout, &fmt->req_channel_layout) == 0) && - (fmt->in_format == fmt->req_format) && (fmt->in_sample_rate == fmt->req_sample_rate); + return (fmt->in_format == fmt->req_format) && + (av_channel_layout_compare(&fmt->in_channel_layout, &fmt->req_channel_layout) == 0) && + (fmt->in_sample_rate == fmt->req_sample_rate); } bool camu_lav_resampler_init(struct camu_lav_resampler *resamp, struct camu_lav_resample_fmt *fmt) { al_memset(resamp, 0, sizeof(struct camu_lav_resampler)); - fmt->resampler_needed = !in_req_match(fmt); + fmt->resampler_needed = !in_req_matches(fmt); + if (!fmt->resampler_needed) return true; camu_lav_resample_fmt_copy(&resamp->fmt, fmt); - if (!fmt->resampler_needed) { - return true; - } - - resamp->resample_context = swr_alloc(); + SwrContext *ctx = NULL; + s32 ret = swr_alloc_set_opts2(&ctx, + &fmt->req_channel_layout, + fmt->req_format, + fmt->req_sample_rate, + &fmt->in_channel_layout, + fmt->in_format, + fmt->in_sample_rate, + 0, + NULL); - SwrContext *ctx = resamp->resample_context; - - if (!ctx) { - al_log_error("lav_resampler", "Failed to create resampler context."); + if (ret != 0) { + al_log_error("lav_resampler", "Failed to configure resampler context."); return false; } - av_opt_set_chlayout(ctx, "in_chlayout", &fmt->in_channel_layout, 0); - av_opt_set_chlayout(ctx, "out_chlayout", &fmt->req_channel_layout, 0); - av_opt_set_int(ctx, "in_sample_rate", fmt->in_sample_rate, 0); - av_opt_set_int(ctx, "out_sample_rate", fmt->req_sample_rate, 0); - av_opt_set_sample_fmt(ctx, "in_sample_fmt", fmt->in_format, 0); - av_opt_set_sample_fmt(ctx, "out_sample_fmt", fmt->req_format, 0); - // Slower but more accurate resampler. //av_opt_set_int(ctx, "resampler", SWR_ENGINE_SOXR, 0); @@ -51,13 +49,16 @@ bool camu_lav_resampler_init(struct camu_lav_resampler *resamp, struct camu_lav_ return false; } + resamp->resample_context = ctx; + return true; } s32 camu_lav_resampler_sample_count(struct camu_lav_resampler *resamp, s32 in_samples) { - al_assert(resamp->fmt.resampler_needed); return swr_get_out_samples(resamp->resample_context, in_samples); + //return av_rescale_rnd(swr_get_delay(resamp->resample_context, resamp->fmt.req_sample_rate) + + // in_samples, resamp->fmt.in_sample_rate, resamp->fmt.req_sample_rate, AV_ROUND_UP); } static inline void free_sample_data(struct camu_lav_resampler *resamp) @@ -70,15 +71,14 @@ static inline void alloc_sample_data(struct camu_lav_resampler *resamp, s32 samp if (resamp->sample_count >= sample_count) return; free_sample_data(resamp); s32 nb_channels = resamp->fmt.req_channel_layout.nb_channels; - av_samples_alloc(resamp->data, NULL, nb_channels, sample_count, resamp->fmt.req_format, 0); + av_samples_alloc(resamp->data, NULL, nb_channels, sample_count, resamp->fmt.req_format, 32); resamp->sample_count = sample_count; } s32 camu_lav_resampler_convert(struct camu_lav_resampler *resamp, const u8 **in_data, s32 in_samples) { - al_assert(resamp->fmt.resampler_needed); - s32 max_resample_count = in_samples ? - camu_lav_resampler_sample_count(resamp, in_samples) : resamp->sample_count; + al_assert(in_samples > 0); + s32 max_resample_count = camu_lav_resampler_sample_count(resamp, in_samples); alloc_sample_data(resamp, max_resample_count); s32 resample_count = swr_convert(resamp->resample_context, resamp->data, max_resample_count, in_data, in_samples); @@ -95,7 +95,6 @@ u8 **camu_lav_resampler_get_data(struct camu_lav_resampler *resamp) void camu_lav_resampler_close(struct camu_lav_resampler *resamp) { - al_assert(resamp->fmt.resampler_needed); if (resamp->resample_context) { swr_close(resamp->resample_context); swr_free(&resamp->resample_context); @@ -105,13 +104,13 @@ void camu_lav_resampler_close(struct camu_lav_resampler *resamp) void camu_lav_resample_fmt_copy(struct camu_lav_resample_fmt *dest, struct camu_lav_resample_fmt *src) { + dest->resampler_needed = src->resampler_needed; dest->in_format = src->in_format; av_channel_layout_copy(&dest->in_channel_layout, &src->in_channel_layout); dest->in_sample_rate = src->in_sample_rate; dest->req_format = src->req_format; av_channel_layout_copy(&dest->req_channel_layout, &src->req_channel_layout); dest->req_sample_rate = src->req_sample_rate; - dest->resampler_needed = src->resampler_needed; } size_t camu_lav_resample_fmt_bytes_per_sample(struct camu_lav_resample_fmt *fmt) diff --git a/src/codec/libav/resampler.h b/src/codec/libav/resampler.h index 703d9a7..92525b2 100644 --- a/src/codec/libav/resampler.h +++ b/src/codec/libav/resampler.h @@ -5,15 +5,15 @@ #include <al/types.h> struct camu_lav_resample_fmt { + bool resampler_needed; + enum AVSampleFormat in_format; + enum AVSampleFormat req_format; s32 in_channel_count; s32 req_channel_count; AVChannelLayout in_channel_layout; AVChannelLayout req_channel_layout; s32 in_sample_rate; s32 req_sample_rate; - enum AVSampleFormat in_format; - enum AVSampleFormat req_format; - bool resampler_needed; }; struct camu_lav_resampler { diff --git a/src/codec/meson.build b/src/codec/meson.build index 0946a17..20524a4 100644 --- a/src/codec/meson.build +++ b/src/codec/meson.build @@ -11,13 +11,17 @@ av_server_src = [ av_client_src = [ av_src, 'libav/decoder.c', - 'libav/resampler.c', - 'libav/scaler.c' + 'libav/resampler.c' ] -av_inc = [] av_ldflags = [] +av_inc = [] av_server_deps = [] av_client_deps = [] +av_client_use_scaler = false + +if av_client_use_scaler + av_client_src += ['libav/scaler.c'] +endif libavutil = dependency('libavutil', required: false) libavformat = dependency('libavformat', required: false) @@ -32,9 +36,11 @@ if not (libavutil.found() and libavformat.found() and libavcodec.found() and lib libavcodec = av_proj.get_variable('avcodec') libswresample = av_proj.get_variable('swresample') libswscale = av_proj.get_variable('swscale') - av_inc += [av_proj.get_variable('inc')] - av_ldflags += ['-L' + av_proj.get_variable('libdir')] - av_client_deps += [dependency('zlib')] + av_ldflags += ['-L' + av_proj.get_variable('av_lib_dir')] + # Only used to set include dirs for libav. + av_inc_dep = av_proj.get_variable('av_inc_dep') + av_server_deps += [av_inc_dep] + av_client_deps += [av_inc_dep, dependency('zlib')] soxr = compiler.find_library('soxr', required: false) if soxr.found() av_client_deps += [soxr] @@ -45,7 +51,10 @@ endif if libavutil.found() and libavformat.found() and libavcodec.found() and libswresample.found() and libswscale.found() av_server_deps += [libavutil, libavformat, libavcodec] - av_client_deps += [libavutil, libavformat, libavcodec, libswresample, libswscale] + av_client_deps += [libavutil, libavformat, libavcodec, libswresample] + if av_client_use_scaler + av_client_deps += [libswscale] + endif av_server = declare_dependency(sources: av_server_src, dependencies: av_server_deps, include_directories: av_inc, link_args: av_ldflags) av_client = declare_dependency(sources: av_client_src, dependencies: av_client_deps, diff --git a/src/fruits/cmc/cmc.c b/src/fruits/cmc/cmc.c index 7fd8691..89800f6 100644 --- a/src/fruits/cmc/cmc.c +++ b/src/fruits/cmc/cmc.c @@ -764,10 +764,10 @@ s32 main(s32 argc, char *argv[]) aki_event_loop_init(&c.loop); camu_client_init(&c.client, &c.loop, client_callback, &c); - camu_client_login(&c.client, al_str_c("andrew"), al_str_c("127.0.0.1"), TREE_PORT); + camu_client_login(&c.client, al_str_c("andrew"), TREE_SERVER_IP, TREE_PORT); camu_resource_client_init(&c.resource_client, &c.loop, resource_client_callback, &c); - camu_resource_client_connect(&c.resource_client, al_str_c("127.0.0.1"), TREE_RESOURCE_PORT); + camu_resource_client_connect(&c.resource_client, TREE_SERVER_IP, TREE_RESOURCE_PORT); aki_event_loop_run(&c.loop); diff --git a/src/fruits/sink/sink.c b/src/fruits/sink/sink.c index 939e0af..d20f7c4 100644 --- a/src/fruits/sink/sink.c +++ b/src/fruits/sink/sink.c @@ -1,8 +1,6 @@ #include <al/log.h> #include <aki/event_loop.h> -#include "../../codec/libav/common.h" - #include "../../mixer/audio_miniaudio.h" #include "../../screen/screen.h" @@ -12,8 +10,6 @@ #include "../../libsink/sink.h" #include "../../tree/common.h" -#include "../../shoki/src/search.h" - struct cmv { s32 quit; struct camu_screen scr; @@ -100,7 +96,6 @@ static u8 sink_callback(void *userdata, u8 op, u8 type, void *opaque) break; case CAMU_SINK_EXIT: camu_sink_close(&c->sink); - aki_event_loop_break(&c->loop); break; } return CAMU_SINK_OK; @@ -166,13 +161,16 @@ s32 wmain(s32 argc, wchar_t **argv) } c.renderer->render(c.renderer, &c.scr); - camu_mixer_init(&c.mixer, (struct camu_audio *)&audio_plugin_miniaudio); - c.mixer.audio->configure_stream(c.mixer.audio, NULL); + if (!camu_mixer_init(&c.mixer, (struct camu_audio *)&audio_plugin_miniaudio)) { + goto err; + } camu_sink_init(&c.sink, &c.loop, &c.mixer, c.renderer); c.sink.callback = sink_callback; c.sink.userdata = &c; - camu_sink_connect(&c.sink, al_str_c("127.0.0.1"), TREE_PORT); + if (!camu_sink_connect(&c.sink, TREE_SERVER_IP, TREE_PORT)) { + goto err; + } struct aki_thread thread0; aki_thread_create(&thread0, event_loop_thread, &c); diff --git a/src/libsink/sink.c b/src/libsink/sink.c index 58e3db3..343275b 100644 --- a/src/libsink/sink.c +++ b/src/libsink/sink.c @@ -1,8 +1,11 @@ #include <al/log.h> #include "../tree/common.h" +#include "../bimu/common.h" +#include "../bimu/handler.h" #include "sink.h" +#include "common.h" enum { SINK_EMPTY = 0, @@ -12,6 +15,7 @@ enum { enum { ENTRY_LOADED = 0, + ENTRY_BUFFERED, ENTRY_DISREGUARDED }; @@ -27,8 +31,9 @@ enum { START, STOP, TOGGLE_PAUSE, + RESEEK, SEEK, - ENTRY_BUFFERED, // Currently set entry is buffered. + SET_BUFFERED, // Currently set entry is buffered. CLOSE, // Internal. CORK, @@ -94,6 +99,7 @@ static void handle_sink_cmd(struct camu_sink *sink, struct camu_sink_cmd *cmd) case TOGGLE_PAUSE: { struct camu_sink_entry *entry = (struct camu_sink_entry *)cmd->opaque; if (camu_clock_is_paused(&entry->clock)) { + camu_clock_calc_tick(&entry->clock); camu_clock_resume(&entry->clock); if (sink->audio.state == SINK_PAUSED) { sink->callback(sink->userdata, CAMU_SINK_START, CAMU_SINK_AUDIO, NULL); @@ -116,36 +122,59 @@ static void handle_sink_cmd(struct camu_sink *sink, struct camu_sink_cmd *cmd) } break; } + case RESEEK: { + struct camu_sink_entry *entry = (struct camu_sink_entry *)cmd->opaque; + bmu_client_reseek(&entry->client); + break; + } case SEEK: { struct camu_sink_entry *entry = (struct camu_sink_entry *)cmd->opaque; bmu_client_seek(&entry->client, cmd->value.f); break; } - case ENTRY_BUFFERED: { +// case SET_BUFFERED: { +// switch (cmd->value.i) { +// case CAMU_SINK_AUDIO: +// sink->callback(sink->userdata, CAMU_SINK_SET_BUFFERED, CAMU_SINK_AUDIO, NULL); +// break; +//#ifndef CAMU_SINK_NO_VIDEO +// case CAMU_SINK_VIDEO: +// sink->callback(sink->userdata, CAMU_SINK_SET_BUFFERED, CAMU_SINK_VIDEO, NULL); +// break; +//#endif +// } +// break; +// } + case CLOSE: { + sink->callback(sink->userdata, CAMU_SINK_EXIT, 0, NULL); + return; + } + case CORK: { + struct camu_sink_entry *entry = (struct camu_sink_entry *)cmd->opaque; switch (cmd->value.i) { case CAMU_SINK_AUDIO: - sink->callback(sink->userdata, CAMU_SINK_SET_BUFFERED, CAMU_SINK_AUDIO, NULL); + bmu_vcr_stream_cork(entry->audio.stream); break; #ifndef CAMU_SINK_NO_VIDEO case CAMU_SINK_VIDEO: - sink->callback(sink->userdata, CAMU_SINK_SET_BUFFERED, CAMU_SINK_VIDEO, NULL); + bmu_vcr_stream_cork(entry->video.stream); break; #endif } break; } - case CLOSE: { - sink->callback(sink->userdata, CAMU_SINK_EXIT, 0, NULL); - return; - } - case CORK: { - struct camu_sink_entry *entry = (struct camu_sink_entry *)cmd->opaque; - bmu_client_cork(&entry->client, true); - break; - } case UNCORK: { struct camu_sink_entry *entry = (struct camu_sink_entry *)cmd->opaque; - bmu_client_cork(&entry->client, false); + switch (cmd->value.i) { + case CAMU_SINK_AUDIO: + bmu_vcr_stream_uncork(entry->audio.stream); + break; +#ifndef CAMU_SINK_NO_VIDEO + case CAMU_SINK_VIDEO: + bmu_vcr_stream_uncork(entry->video.stream); + break; +#endif + } break; } } @@ -173,18 +202,27 @@ static void add_audio_if_set_and_buffered(struct camu_sink_entry *entry) { u8 state = entry->audio.state; if (state == BUFFER_SET_OR_BUFFERED) { - entry->sink->callback(entry->sink->userdata, CAMU_SINK_ADD_BUFFER, CAMU_SINK_AUDIO, &entry->audio.buf); - queue_cmd(entry->sink, (struct camu_sink_cmd){ - .op = ENTRY_BUFFERED, - .value.i = CAMU_SINK_AUDIO - }); + bool should_resume = ENTRY_VIDEO_EMPTY(entry) || entry->video.state == BUFFER_ADDED; + if (should_resume && !camu_clock_calc_tick(&entry->clock)) { + queue_cmd(entry->sink, (struct camu_sink_cmd){ + .op = RESEEK, + .opaque = entry + }); + return; + } queue_cmd(entry->sink, (struct camu_sink_cmd){ .op = START, .value.i = CAMU_SINK_AUDIO }); - if (ENTRY_VIDEO_EMPTY(entry) || entry->video.state == BUFFER_ADDED) { + if (should_resume) { camu_clock_resume(&entry->clock); + entry->state = ENTRY_BUFFERED; } + entry->sink->callback(entry->sink->userdata, CAMU_SINK_ADD_BUFFER, CAMU_SINK_AUDIO, &entry->audio.buf); + //queue_cmd(entry->sink, (struct camu_sink_cmd){ + // .op = SET_BUFFERED, + // .value.i = CAMU_SINK_AUDIO + //}); state = BUFFER_ADDED; } else if (state == BUFFER_CONFIGURED) { state = BUFFER_SET_OR_BUFFERED; @@ -204,12 +242,14 @@ static void audio_buffer_callback(void *userdata, u8 op) case CAMU_BUFFER_CORK: queue_cmd(entry->sink, (struct camu_sink_cmd){ .op = CORK, + .value.i = CAMU_SINK_AUDIO, .opaque = entry }); break; case CAMU_BUFFER_UNCORK: queue_cmd(entry->sink, (struct camu_sink_cmd){ .op = UNCORK, + .value.i = CAMU_SINK_AUDIO, .opaque = entry }); break; @@ -234,10 +274,10 @@ static void audio_buffer_callback(void *userdata, u8 op) .value.i = CAMU_SINK_AUDIO }); #ifndef CAMU_SINK_NO_VIDEO - queue_cmd(entry->sink, (struct camu_sink_cmd){ - .op = ENTRY_BUFFERED, - .value.i = CAMU_SINK_VIDEO - }); + //queue_cmd(entry->sink, (struct camu_sink_cmd){ + // .op = SET_BUFFERED, + // .value.i = CAMU_SINK_VIDEO + //}); #endif } break; @@ -250,18 +290,27 @@ static void add_video_if_set_and_buffered(struct camu_sink_entry *entry) { u8 state = entry->video.state; if (state == BUFFER_SET_OR_BUFFERED) { - entry->sink->callback(entry->sink->userdata, CAMU_SINK_ADD_BUFFER, CAMU_SINK_VIDEO, &entry->video.buf); - queue_cmd(entry->sink, (struct camu_sink_cmd){ - .op = ENTRY_BUFFERED, - .value.i = CAMU_SINK_VIDEO - }); + bool should_resume = ENTRY_AUDIO_EMPTY(entry) || entry->audio.state == BUFFER_ADDED; + if (should_resume && !camu_clock_calc_tick(&entry->clock)) { + queue_cmd(entry->sink, (struct camu_sink_cmd){ + .op = RESEEK, + .opaque = entry + }); + return; + } queue_cmd(entry->sink, (struct camu_sink_cmd){ .op = START, .value.i = CAMU_SINK_VIDEO }); - if (ENTRY_AUDIO_EMPTY(entry) || entry->audio.state == BUFFER_ADDED) { + if (should_resume) { camu_clock_resume(&entry->clock); + entry->state = ENTRY_BUFFERED; } + entry->sink->callback(entry->sink->userdata, CAMU_SINK_ADD_BUFFER, CAMU_SINK_VIDEO, &entry->video.buf); + //queue_cmd(entry->sink, (struct camu_sink_cmd){ + // .op = SET_BUFFERED, + // .value.i = CAMU_SINK_VIDEO + //}); state = BUFFER_ADDED; } else if (state == BUFFER_CONFIGURED) { state = BUFFER_SET_OR_BUFFERED; @@ -281,12 +330,14 @@ static void video_buffer_callback(void *userdata, u8 op) case CAMU_BUFFER_CORK: queue_cmd(entry->sink, (struct camu_sink_cmd){ .op = CORK, + .value.i = CAMU_SINK_VIDEO, .opaque = entry }); break; case CAMU_BUFFER_UNCORK: queue_cmd(entry->sink, (struct camu_sink_cmd){ .op = UNCORK, + .value.i = CAMU_SINK_VIDEO, .opaque = entry }); break; @@ -300,22 +351,10 @@ static void video_buffer_callback(void *userdata, u8 op) } #endif -static void client_callback(void *userdata, u8 op, struct bmu_client_stream *stream, void *opaque) +static void client_callback(void *userdata, u8 op, struct bmu_vcr_stream *stream, void *opaque) { struct camu_sink_entry *entry = (struct camu_sink_entry *)userdata; switch (op) { - case BIMU_CLIENT_SET: { - struct bmu_seek_req *req = (struct bmu_seek_req *)opaque; - camu_clock_set(&entry->clock, req->base, req->start); - camu_audio_buffer_reset(&entry->audio.buf); -#ifndef CAMU_SINK_NO_VIDEO - bool single_frame = camu_video_buffer_is_single_frame(&entry->video.buf); - if (!single_frame) { - camu_video_buffer_reset(&entry->video.buf); - } -#endif - break; - } case BIMU_CLIENT_CONFIGURE: { // No data can be sent until all active streams are configured. switch (stream->type) { @@ -346,6 +385,23 @@ static void client_callback(void *userdata, u8 op, struct bmu_client_stream *str } break; } + case BIMU_CLIENT_SET: { + u64 ts = aki_get_timestamp(); + struct bmu_seek_req *req = (struct bmu_seek_req *)opaque; + //req->delay = 0; // Ignore delay. + req->ts -= req->delay; + bool late = ts <= req->ts; + if (late) {} + camu_clock_set(&entry->clock, req->base, req->ts, req->delay); + camu_audio_buffer_reset(&entry->audio.buf); + if (!late) { + // This is a fail-safe for the case where receiving data is extremely slow. + // It should not be depended on for checking if an entry buffers in time. + aki_timer_set_repeat(&entry->timer, AKI_TS_FROM_USEC(ts - req->ts)); + aki_timer_again(&entry->timer); + } + break; + } case BIMU_CLIENT_DATA: { struct camu_frame *frame = (struct camu_frame *)opaque; switch (stream->type) { @@ -395,6 +451,11 @@ static void client_callback(void *userdata, u8 op, struct bmu_client_stream *str #ifndef CAMU_SINK_NO_VIDEO } #endif +#ifndef CAMU_SINK_NO_VIDEO + if (!single_frame) { + camu_video_buffer_reset(&entry->video.buf); + } +#endif break; } case BIMU_CLIENT_EOF: { @@ -417,6 +478,7 @@ static void client_callback(void *userdata, u8 op, struct bmu_client_stream *str } case BIMU_CLIENT_CLOSED: { bmu_client_free(&entry->client); + aki_timer_stop(&entry->timer); camu_audio_buffer_free(&entry->audio.buf); #ifndef CAMU_SINK_NO_VIDEO camu_video_buffer_free(&entry->video.buf); @@ -460,6 +522,15 @@ static struct camu_sink_entry *entry_from_node_id(struct camu_sink *sink, u16 no return NULL; } +static void buffer_timer_callback(void *userdata, struct aki_timer *timer) +{ + struct camu_sink_entry *entry = (struct camu_sink_entry *)userdata; + (void)timer; + aki_mutex_lock(&entry->sink->mutex); + aki_mutex_unlock(&entry->sink->mutex); + aki_timer_stop(&entry->timer); +} + static bool buffer_command_callback(void *userdata, struct aki_rpc_connection *conn, struct aki_packet *packet, struct aki_packet *rpacket) { @@ -492,11 +563,14 @@ static bool buffer_command_callback(void *userdata, struct aki_rpc_connection *c entry->video.buf.userdata = entry; #endif + aki_timer_init(&entry->timer, sink->loop, buffer_timer_callback, entry); + entry->client.callback = client_callback; entry->client.userdata = entry; bmu_client_connect(&entry->client, sink->loop, &addr, port, node_id); aki_packet_free(packet); + return false; } @@ -524,6 +598,7 @@ static bool set_command_callback(void *userdata, struct aki_rpc_connection *conn u16 node_id = aki_packet_read_u16(packet); aki_mutex_lock(&sink->mutex); struct camu_sink_entry *entry = entry_from_node_id(sink, node_id); + if (!entry) goto out; struct camu_sink_entry *previous = sink->current; sink->current = entry; if (entry->audio.state == BUFFER_INIT) { @@ -542,8 +617,9 @@ static bool set_command_callback(void *userdata, struct aki_rpc_connection *conn camu_clock_pause(&previous->clock); remove_entry_buffers(sink, previous); } - aki_mutex_unlock(&sink->mutex); +out: + aki_mutex_unlock(&sink->mutex); aki_packet_free(packet); return false; } @@ -644,13 +720,13 @@ void camu_sink_stop(struct camu_sink *sink) void camu_sink_close(struct camu_sink *sink) { aki_mutex_lock(&sink->mutex); - /* struct camu_sink_entry *entry; al_array_foreach(sink->entries, i, entry) { + bmu_client_close(&entry->client); } - */ - al_array_free(sink->entries); aki_mutex_unlock(&sink->mutex); + al_array_free(sink->entries); + aki_rpc_disconnect(&sink->client); aki_signal_stop(&sink->signal); camu_queue_free(sink->queue); aki_mutex_destroy(&sink->mutex); diff --git a/src/libsink/sink.h b/src/libsink/sink.h index 95c280f..e3550bb 100644 --- a/src/libsink/sink.h +++ b/src/libsink/sink.h @@ -18,8 +18,6 @@ #include "../bimu/client.h" -#include "common.h" - enum { CAMU_SINK_AUDIO = 0, #ifndef CAMU_SINK_NO_VIDEO @@ -41,16 +39,17 @@ struct camu_sink_entry { u8 state; struct bmu_client client; struct camu_clock clock; + struct aki_timer timer; struct { u8 state; struct camu_audio_buffer buf; - struct bmu_client_stream *stream; + struct bmu_vcr_stream *stream; } audio; #ifndef CAMU_SINK_NO_VIDEO struct { u8 state; struct camu_video_buffer buf; - struct bmu_client_stream *stream; + struct bmu_vcr_stream *stream; } video; #endif struct camu_sink *sink; diff --git a/src/mixer/audio_miniaudio.c b/src/mixer/audio_miniaudio.c index 3d6f54b..dde742a 100644 --- a/src/mixer/audio_miniaudio.c +++ b/src/mixer/audio_miniaudio.c @@ -7,6 +7,7 @@ static ma_backend backends[] = { ma_backend_pulseaudio, #else ma_backend_wasapi +// ma_backend_dsound #endif }; @@ -38,7 +39,11 @@ static ma_allocation_callbacks alloc_callbacks = { static void miniaudio_log_callback(void *userdata, u32 level, const char *message) { (void)userdata; - if (level <= MA_LOG_LEVEL_WARNING) al_log_debug("audio_miniaudio", message); + if (level < MA_LOG_LEVEL_WARNING) { + al_log_debug("audio_miniaudio", message); + } else { + al_log_warn("audio_miniaudio", message); + } } static bool audio_miniaudio_init(struct camu_audio *audio, str *name) @@ -48,53 +53,65 @@ static bool audio_miniaudio_init(struct camu_audio *audio, str *name) ma_log_register_callback(&ma->log, ma_log_callback_init(miniaudio_log_callback, NULL)); ma->context_config = ma_context_config_init(); ma->context_config.pLog = &ma->log; - ma->context_config.alsa.useVerboseDeviceEnumeration = true; + ma->context_config.alsa.useVerboseDeviceEnumeration = MA_TRUE; char *c_str = al_str_to_c_str(name); ma->context_config.pulse.pApplicationName = c_str; - //ma->context_config.pulse.pServerName = ""; - ma->context_config.pulse.tryAutoSpawn = true;; + ma->context_config.pulse.tryAutoSpawn = MA_TRUE; s32 ret = ma_context_init(backends, AL_ARRAY_SIZE(backends), &ma->context_config, &ma->context); if (ret != MA_SUCCESS) { al_log_error("audio_miniaudio", "Failed to initialize context (%d).", ret); return false; } - //if (ma_context_get_devices(&ma->context, &ma->infos, &ma->info_count, NULL, NULL) != MA_SUCCESS) { - // return false; - //} - //ma->selected_device = NULL; - //for (u32 i = 0; i < ma->info_count; i++) { - // ma_device_info *info = &ma->infos[i]; - // ma_device_info real_info; - // ma_context_get_device_info(&ma->context, ma_device_type_playback, &info->id, &real_info); - // for (u32 j = 0; j < real_info.nativeDataFormatCount; j++) { - // if (strcmp(real_info.id.alsa, "hw:CARD=D10,DEV=0") == 0) { - // ma->selected_device = info; - // break; - // } - // /* - // al_printf("%s\n", real_info.id.alsa); - // al_printf("%i\n", real_info.nativeDataFormats[j].format); - // al_printf("%i\n", real_info.nativeDataFormats[j].channels); - // al_printf("%i\n", real_info.nativeDataFormats[j].sampleRate); - // */ - // } - // if (ma->selected_device) break; - // //al_printf("\n"); - //} - ////al_printf("%i\n", ma->info_count); + /* + if (ma_context_get_devices(&ma->context, &ma->infos, &ma->info_count, NULL, NULL) != MA_SUCCESS) { + return false; + } + for (u32 i = 0; i < ma->info_count; i++) { + ma_device_info *info = &ma->infos[i]; + ma_device_info real_info; + ma_context_get_device_info(&ma->context, ma_device_type_playback, &info->id, &real_info); + for (u32 j = 0; j < real_info.nativeDataFormatCount; j++) { + //al_printf("%s\n", real_info.id.alsa); + //al_printf("%s\n", real_info.id.pulse); + //al_printf("%i\n", real_info.nativeDataFormats[j].format); + //al_printf("%i\n", real_info.nativeDataFormats[j].channels); + //al_printf("%i\n", real_info.nativeDataFormats[j].sampleRate); + //al_printf("\n"); + } + } + //al_printf("%i\n", ma->info_count); + */ return true; } +static enum AVSampleFormat av_sample_fmt_from_miniaudio(s32 fmt) +{ + switch (fmt) { + case ma_format_u8: + return AV_SAMPLE_FMT_U8; + case ma_format_s16: + return AV_SAMPLE_FMT_S16; + case ma_format_s24: + case ma_format_s32: + return AV_SAMPLE_FMT_S32; + case ma_format_f32: + return AV_SAMPLE_FMT_FLT; + case ma_format_unknown: + default: + al_assert(false); + return AV_SAMPLE_FMT_NONE; + } +} + static void audio_miniaudio_pick_format(struct camu_audio *audio, struct camu_lav_resample_fmt *fmt) { struct camu_audio_miniaudio *ma = (struct camu_audio_miniaudio *)audio; - (void)ma; - fmt->req_channel_count = 2; - fmt->req_format = AV_SAMPLE_FMT_S32; - fmt->req_sample_rate = 44100; + fmt->req_format = av_sample_fmt_from_miniaudio(ma->device.playback.internalFormat); + fmt->req_channel_count = ma->device.playback.internalChannels; + fmt->req_sample_rate = ma->device.playback.internalSampleRate; } -static void data_callback(ma_device *device, void *output, const void *input, ma_uint32 frame_count) +static void data_callback(ma_device *device, void *output, const void *input, u32 frame_count) { struct camu_audio_miniaudio *ma = (struct camu_audio_miniaudio *)device->pUserData; (void)input; @@ -111,22 +128,29 @@ static bool audio_miniaudio_configure_stream(struct camu_audio *audio, void *opa (void)fmt; ma->config = ma_device_config_init(ma_device_type_playback); //ma->config.playback.pDeviceID = &ma->selected_device->id; + //ma->config.performanceProfile = ma_performance_profile_low_latency; ma->config.performanceProfile = ma_performance_profile_conservative; ma->config.periods = DEFAULT_PERIODS; ma->config.periodSizeInMilliseconds = DEFAULT_PERIOD_SIZE_IN_MILLISECONDS; - ma->config.playback.channels = 2; - ma->config.playback.format = ma_format_s32; - ma->config.sampleRate = 44100; + ma->config.playback.format = ma_format_unknown; + ma->config.playback.channels = 0; + ma->config.sampleRate = 0; ma->config.dataCallback = data_callback; ma->config.pUserData = ma; - ma->config.noPreSilencedOutputBuffer = true; + ma->config.noPreSilencedOutputBuffer = MA_TRUE; + ma->config.noFixedSizedCallback = MA_TRUE; + ma->config.noClip = MA_TRUE; + ma->config.wasapi.noAutoConvertSRC = MA_FALSE; + ma->config.wasapi.noDefaultQualitySRC = MA_FALSE; s32 ret = ma_device_init(&ma->context, &ma->config, &ma->device); if (ret != MA_SUCCESS) { al_log_error("audio_miniaudio", "Failed to initialize device (%d).", ret); return false; } - const char *format_name = av_get_sample_fmt_name(AV_SAMPLE_FMT_S32); - al_log_info("audio_miniaudio", "Output: %s (%dch) %dHz.", format_name, 2, 44100); + enum AVSampleFormat avfmt = av_sample_fmt_from_miniaudio(ma->device.playback.internalFormat); + const char *format_name = av_get_sample_fmt_name(avfmt); + al_log_info("audio_miniaudio", "Output: %s (%dch) %dHz.", format_name, + ma->device.playback.internalChannels, ma->device.playback.internalSampleRate); return true; } @@ -177,9 +201,9 @@ struct camu_audio_miniaudio audio_plugin_miniaudio = { .stop = audio_miniaudio_stop, .free = audio_miniaudio_free }, - .log = { 0 }, + .log = { }, .context_config = { 0 }, - .context = { 0 }, + .context = { }, .infos = NULL, .info_count = 0, .selected_device = NULL, diff --git a/src/mixer/meson.build b/src/mixer/meson.build index 71c003b..ab14b6f 100644 --- a/src/mixer/meson.build +++ b/src/mixer/meson.build @@ -21,6 +21,7 @@ if not is_windows miniaudio_args += ['-DMA_ENABLE_PULSEAUDIO', '-DMA_NO_RUNTIME_LINKING'] else miniaudio_args += ['-DMA_ENABLE_WASAPI'] + #miniaudio_args += ['-DMA_ENABLE_DSOUND'] endif mixer = declare_dependency(sources: mixer_src, dependencies: mixer_deps, diff --git a/src/mixer/mixer.c b/src/mixer/mixer.c index 663e7aa..a4c0ef5 100644 --- a/src/mixer/mixer.c +++ b/src/mixer/mixer.c @@ -1,6 +1,7 @@ #include "../buffer/audio.h" #include "mixer.h" +#include "audio.h" static s32 data_callback(void *userdata, u8 *data, s32 frame_count) { @@ -39,8 +40,10 @@ bool camu_mixer_init(struct camu_mixer *mixer, struct camu_audio *audio) mixer->audio->data_callback = data_callback; mixer->audio->userdata = mixer; mixer->audio->init(mixer->audio, al_str_c("camu")); - mixer->audio->pick_format(mixer->audio, &mixer->fmt); - av_channel_layout_default(&mixer->fmt.req_channel_layout, mixer->fmt.req_channel_count); + if (!mixer->audio->configure_stream(mixer->audio, NULL)) { + return false; + } + camu_mixer_pick_format(mixer, &mixer->fmt); mixer->paused = true; al_array_init(mixer->buffers); #ifdef CAMU_MIXER_THREADED @@ -55,6 +58,7 @@ bool camu_mixer_init(struct camu_mixer *mixer, struct camu_audio *audio) void camu_mixer_pick_format(struct camu_mixer *mixer, struct camu_lav_resample_fmt *fmt) { mixer->audio->pick_format(mixer->audio, fmt); + av_channel_layout_default(&fmt->req_channel_layout, fmt->req_channel_count); } f64 camu_mixer_get_latency(struct camu_mixer *mixer) @@ -90,8 +94,6 @@ void camu_mixer_add_buffer(struct camu_mixer *mixer, struct camu_audio_buffer *b #ifdef CAMU_MIXER_THREADED aki_mutex_lock(&mixer->mutex); al_array_push(mixer->add_queue, buf); - // Ensure an allocation doesn't happen in data_callback. - al_array_reserve(mixer->buffers, mixer->buffers.size + mixer->add_queue.size); al_atomic_bool_store(&mixer->queued, true, AL_ATOMIC_RELAXED); aki_mutex_unlock(&mixer->mutex); #else @@ -102,15 +104,16 @@ void camu_mixer_add_buffer(struct camu_mixer *mixer, struct camu_audio_buffer *b #ifdef CAMU_MIXER_THREADED static void run_queue_internal(struct camu_mixer *mixer) { + al_array_reserve(mixer->buffers, mixer->buffers.size + mixer->add_queue.size); struct camu_audio_buffer *buf; al_array_foreach(mixer->add_queue, i, buf) { add_buffer_internal(mixer, buf); - al_array_remove_at_iter(mixer->add_queue, i); } + mixer->add_queue.size = 0; al_array_foreach(mixer->rem_queue, i, buf) { remove_buffer_internal(mixer, buf); - al_array_remove_at_iter(mixer->rem_queue, i); } + mixer->rem_queue.size = 0; al_atomic_bool_store(&mixer->queued, false, AL_ATOMIC_RELAXED); } #endif diff --git a/src/tree/common.h b/src/tree/common.h index 4e3ec3a..d4d4836 100644 --- a/src/tree/common.h +++ b/src/tree/common.h @@ -1,8 +1,13 @@ #pragma once -#define TREE_PORT 4356 -#define TREE_RESOURCE_PORT 4357 -#define TREE_STREAM_PORT 4358 +#include <al/str.h> + +#define TREE_PORT 14356 +#define TREE_RESOURCE_PORT 14357 +#define TREE_STREAM_PORT 14358 + +#define TREE_SERVER_IP al_str_c("127.0.0.1") +//#define TREE_SERVER_IP al_str_c("108.52.160.112") enum { TREE_NODE = 0, diff --git a/src/tree/list.c b/src/tree/list.c index 8102e05..c1630b7 100644 --- a/src/tree/list.c +++ b/src/tree/list.c @@ -7,6 +7,7 @@ #include "list.h" #include "tree.h" +#include "common.h" void tree_list_init(struct tree_list *list, struct tree_server *tree, str *name) { @@ -21,7 +22,7 @@ void tree_list_init(struct tree_list *list, struct tree_server *tree, str *name) static void send_buffer_cmd(struct tree_list *list, struct tree_sink *sink, struct tree_list_entry *entry) { struct aki_packet *packet = aki_rpc_get_packet(&list->tree->server, CAMU_SINK_CMD_BUFFER); - aki_packet_write_str(packet, al_str_c("127.0.0.1")); + aki_packet_write_str(packet, TREE_SERVER_IP); aki_packet_write_s32(packet, TREE_STREAM_PORT); aki_packet_write_u16(packet, entry->node_id); aki_rpc_connection_command(sink->conn, packet, NULL, NULL); diff --git a/src/tree/tree.c b/src/tree/tree.c index 8a0972f..367e0ff 100644 --- a/src/tree/tree.c +++ b/src/tree/tree.c @@ -2,9 +2,8 @@ #include <aki/file.h> #include <jansson.h> -#include "../libclient/commands.h" - #include "tree.h" +#include "common.h" #define USER_AGENT al_str_c("Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0") diff --git a/src/tree/tree.h b/src/tree/tree.h index 2b61e3b..6339889 100644 --- a/src/tree/tree.h +++ b/src/tree/tree.h @@ -12,7 +12,6 @@ #include "../bimu/server.h" -#include "common.h" #include "resource_manager.h" #include "list.h" diff --git a/subprojects/ffmpeg.wrap b/subprojects/ffmpeg.wrap index 76dcda1..c030027 100644 --- a/subprojects/ffmpeg.wrap +++ b/subprojects/ffmpeg.wrap @@ -1,6 +1,10 @@ [wrap-file] directory = ffmpeg-6.1.1 +#directory = ffmpeg-5.1.4 source_url = https://www.ffmpeg.org/releases/ffmpeg-6.1.1.tar.gz +#source_url = https://www.ffmpeg.org/releases/ffmpeg-5.1.4.tar.gz source_filename = ffmpeg-6.1.1.tar.gz +#source_filename = ffmpeg-5.1.4.tar.gz source_hash = b0aee531e4a91fed6bc031445dfc3ad8eb36de1fcb0fa2acdb589ecc9f8dc9cb +#source_hash = ad1d83e0f022ba405928ea4985c9cab978c4698bb7937738a1085808c3eb78b4 patch_directory = ffmpeg diff --git a/subprojects/packagefiles/ffmpeg/meson.build b/subprojects/packagefiles/ffmpeg/meson.build index c4ab72d..cff10e9 100644 --- a/subprojects/packagefiles/ffmpeg/meson.build +++ b/subprojects/packagefiles/ffmpeg/meson.build @@ -31,7 +31,7 @@ endif #'--extra-ldflags=-L/home/pizza/c/camu/build6/subprojects/libalabaster -l:libalabaster.a', #'--malloc-prefix=al_', -decoders = 'flac,mp3,aac,opus,alac,mjpeg,jpeg2000,h264,hevc,vp9' +decoders = 'flac,mp3,mp3float,aac,opus,alac,mjpeg,jpeg2000,h264,hevc,vp9' #decoders += ',pcm_f32be,pcm_f32le,pcm_s16be,pcm_s16be_planar,pcm_s16le,pcm_s16le_planar,pcm_s32be,pcm_s32le,pcm_s32le_planar,pcm_dvd,apng,mpegvideo,mpeg2video' #decoders += ',ass,srt' @@ -106,5 +106,5 @@ avcodec = proj.dependency('avcodec') swresample = proj.dependency('swresample') swscale = proj.dependency('swscale') -inc = include_directories('.') -libdir = meson.project_build_root() + '/dist/usr/locallib' +av_inc_dep = declare_dependency(include_directories: include_directories('.', 'build/')) +av_lib_dir = join_paths(meson.project_build_root(), 'dist/usr/locallib') |