ffi 1.16.0 → 1.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +64 -0
- data/Gemfile +9 -2
- data/README.md +2 -2
- data/Rakefile +17 -5
- data/ext/ffi_c/AbstractMemory.c +43 -40
- data/ext/ffi_c/ArrayType.c +2 -2
- data/ext/ffi_c/Buffer.c +4 -4
- data/ext/ffi_c/Call.c +18 -9
- data/ext/ffi_c/Call.h +3 -2
- data/ext/ffi_c/DynamicLibrary.c +2 -2
- data/ext/ffi_c/Function.c +10 -4
- data/ext/ffi_c/FunctionInfo.c +5 -3
- data/ext/ffi_c/LastError.c +4 -4
- data/ext/ffi_c/MemoryPointer.c +2 -2
- data/ext/ffi_c/Pointer.c +14 -11
- data/ext/ffi_c/Struct.c +18 -7
- data/ext/ffi_c/StructLayout.c +13 -13
- data/ext/ffi_c/Type.c +17 -16
- data/ext/ffi_c/Types.c +7 -1
- data/ext/ffi_c/Types.h +0 -1
- data/ext/ffi_c/Variadic.c +6 -3
- data/ext/ffi_c/libffi/.allow-ai-service +0 -0
- data/ext/ffi_c/libffi/.github/workflows/build.yml +34 -15
- data/ext/ffi_c/libffi/.github/workflows/emscripten.yml +2 -1
- data/ext/ffi_c/libffi/LICENSE +1 -1
- data/ext/ffi_c/libffi/README.md +10 -5
- data/ext/ffi_c/libffi/compile +348 -0
- data/ext/ffi_c/libffi/configure +15 -15
- data/ext/ffi_c/libffi/configure.ac +2 -2
- data/ext/ffi_c/libffi/configure.host +1 -1
- data/ext/ffi_c/libffi/doc/libffi.texi +1 -1
- data/ext/ffi_c/libffi/doc/version.texi +4 -4
- data/ext/ffi_c/libffi/include/ffi.h.in +2 -11
- data/ext/ffi_c/libffi/include/ffi_common.h +4 -2
- data/ext/ffi_c/libffi/libffi.map.in +5 -0
- data/ext/ffi_c/libffi/libtool-version +1 -1
- data/ext/ffi_c/libffi/ltmain.sh +8 -20
- data/ext/ffi_c/libffi/msvc_build/aarch64/aarch64_include/ffi.h +1 -1
- data/ext/ffi_c/libffi/src/aarch64/ffi.c +26 -13
- data/ext/ffi_c/libffi/src/aarch64/sysv.S +198 -46
- data/ext/ffi_c/libffi/src/closures.c +3 -3
- data/ext/ffi_c/libffi/src/debug.c +2 -2
- data/ext/ffi_c/libffi/src/dlmalloc.c +1 -1
- data/ext/ffi_c/libffi/src/loongarch64/ffi.c +3 -0
- data/ext/ffi_c/libffi/src/mips/ffi.c +12 -4
- data/ext/ffi_c/libffi/src/mips/n32.S +65 -14
- data/ext/ffi_c/libffi/src/powerpc/ffi_darwin.c +36 -24
- data/ext/ffi_c/libffi/src/sparc/ffi64.c +7 -1
- data/ext/ffi_c/libffi/src/tramp.c +1 -1
- data/ext/ffi_c/libffi/src/types.c +4 -6
- data/ext/ffi_c/libffi/src/wasm32/ffi.c +13 -0
- data/ext/ffi_c/libffi/src/x86/ffiw64.c +1 -1
- data/ext/ffi_c/libffi/testsuite/Makefile.am +79 -127
- data/ext/ffi_c/libffi/testsuite/Makefile.in +79 -127
- data/ext/ffi_c/libffi/testsuite/emscripten/conftest.py +6 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/callback.c +99 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/callback2.c +108 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/callback3.c +114 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/callback4.c +119 -0
- data/ext/ffi_c/libffi.darwin.mk +2 -2
- data/ffi.gemspec +1 -1
- data/lib/ffi/autopointer.rb +1 -9
- data/lib/ffi/dynamic_library.rb +34 -5
- data/lib/ffi/enum.rb +0 -1
- data/lib/ffi/function.rb +1 -1
- data/lib/ffi/io.rb +2 -2
- data/lib/ffi/library.rb +23 -23
- data/lib/ffi/platform/aarch64-linux/types.conf +74 -3
- data/lib/ffi/pointer.rb +6 -6
- data/lib/ffi/struct.rb +4 -4
- data/lib/ffi/struct_layout.rb +2 -2
- data/lib/ffi/struct_layout_builder.rb +8 -8
- data/lib/ffi/types.rb +51 -48
- data/lib/ffi/version.rb +1 -1
- data/samples/hello_ractor.rb +11 -0
- data/samples/qsort_ractor.rb +28 -0
- data/sig/ffi/abstract_memory.rbs +165 -0
- data/sig/ffi/auto_pointer.rbs +27 -0
- data/sig/ffi/buffer.rbs +18 -0
- data/sig/ffi/data_converter.rbs +10 -0
- data/sig/ffi/dynamic_library.rbs +9 -0
- data/sig/ffi/enum.rbs +38 -0
- data/sig/ffi/function.rbs +39 -0
- data/sig/ffi/library.rbs +42 -0
- data/sig/ffi/native_type.rbs +86 -0
- data/sig/ffi/pointer.rbs +42 -0
- data/sig/ffi/struct.rbs +76 -0
- data/sig/ffi/struct_by_reference.rbs +11 -0
- data/sig/ffi/struct_by_value.rbs +7 -0
- data/sig/ffi/struct_layout.rbs +9 -0
- data/sig/ffi/struct_layout_builder.rbs +5 -0
- data/sig/ffi/type.rbs +39 -0
- data/sig/ffi.rbs +26 -0
- data.tar.gz.sig +0 -0
- metadata +40 -18
- metadata.gz.sig +1 -1
data/sig/ffi/struct.rbs
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
module FFI
|
|
2
|
+
class Struct[out P < AbstractMemory, unchecked out E]
|
|
3
|
+
type layout = Library::ffi_lib_type | singleton(StructLayout::Field) | [layout, Integer]
|
|
4
|
+
|
|
5
|
+
type ptr = Type::Mapped[
|
|
6
|
+
StructByReference[Struct[AbstractMemory, untyped], AbstractMemory],
|
|
7
|
+
AbstractMemory, instance, untyped
|
|
8
|
+
]
|
|
9
|
+
def self.ptr: (?untyped flags) -> ptr # https://github.com/ffi/ffi/issues/1073
|
|
10
|
+
alias self.by_ref self.ptr
|
|
11
|
+
def self.in: () -> ptr
|
|
12
|
+
def self.out: () -> ptr
|
|
13
|
+
def self.val: () -> StructByValue[singleton(Struct)]
|
|
14
|
+
alias self.by_value self.val
|
|
15
|
+
|
|
16
|
+
alias self.alloc_inout self.new
|
|
17
|
+
alias self.alloc_in self.new
|
|
18
|
+
alias self.alloc_out self.new
|
|
19
|
+
alias self.new_inout self.new
|
|
20
|
+
alias self.new_in self.new
|
|
21
|
+
alias self.new_out self.new
|
|
22
|
+
|
|
23
|
+
def self.auto_ptr: () -> Type::Mapped[
|
|
24
|
+
ManagedStructConverter[ManagedStruct[AutoPointer, untyped], AutoPointer],
|
|
25
|
+
Pointer, instance, untyped
|
|
26
|
+
]
|
|
27
|
+
def self.layout: (*layout | Integer) -> StructLayout
|
|
28
|
+
| (Hash[Symbol, layout]) -> StructLayout
|
|
29
|
+
def self.size=: (Integer size) -> Integer
|
|
30
|
+
|
|
31
|
+
def self?.alignment: () -> Integer
|
|
32
|
+
def self?.members: () -> Array[Symbol]
|
|
33
|
+
def self?.offset_of: (Symbol name) -> Integer
|
|
34
|
+
def self?.offsets: () -> Array[[Symbol, Integer]]
|
|
35
|
+
def self?.size: -> Integer
|
|
36
|
+
|
|
37
|
+
def initialize: (?P pointer, *layout args) -> void
|
|
38
|
+
def []: (Symbol field_name) -> E
|
|
39
|
+
def []=: (Symbol field_name, E value) -> E
|
|
40
|
+
alias align alignment
|
|
41
|
+
def clear: () -> self
|
|
42
|
+
def layout: () -> StructLayout
|
|
43
|
+
def null?: () -> bool
|
|
44
|
+
def order: (AbstractMemory::order_in order) -> Struct[P, E]
|
|
45
|
+
| () -> AbstractMemory::order_out
|
|
46
|
+
def pointer: () -> P
|
|
47
|
+
alias to_ptr pointer
|
|
48
|
+
def values: () -> Array[E]
|
|
49
|
+
|
|
50
|
+
class InlineArray[out P < AbstractMemory, unchecked out E]
|
|
51
|
+
include Enumerable[E]
|
|
52
|
+
include AbstractMemory::_Size
|
|
53
|
+
|
|
54
|
+
def initialize: (P memory, StructLayout::Field field) -> self
|
|
55
|
+
def []: (Integer index) -> E
|
|
56
|
+
def []=: (Integer index, E value) -> E
|
|
57
|
+
def each: () { (E) -> void } -> self
|
|
58
|
+
def to_a: () -> Array[E]
|
|
59
|
+
def to_ptr: () -> P
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
class ManagedStructConverter[S < ManagedStruct[P, untyped], P < AutoPointer] < StructByReference[S, P]
|
|
63
|
+
def initialize: ...
|
|
64
|
+
def from_native: (Pointer ptr, untyped ctx) -> S
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
class ManagedStruct[out P < AutoPointer, unchecked out E] < Struct[P, E]
|
|
69
|
+
def self.release: (AbstractMemory ptr) -> void
|
|
70
|
+
def initialize: (Pointer pointer) -> self
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
class Union[out P < AbstractMemory, unchecked out E] < Struct[P, E]
|
|
74
|
+
def self.builder: () -> StructLayoutBuilder
|
|
75
|
+
end
|
|
76
|
+
end
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
module FFI
|
|
2
|
+
class StructByReference[S < Struct[P, untyped], P < AbstractMemory]
|
|
3
|
+
include DataConverter[P, S, untyped]
|
|
4
|
+
attr_reader struct_class: Struct[P, untyped]
|
|
5
|
+
|
|
6
|
+
def initialize: (S struct_class) -> void
|
|
7
|
+
def from_native: (P value, untyped ctx) -> S
|
|
8
|
+
def native_type: () -> Type::Builtin
|
|
9
|
+
def to_native: (S? value, untyped ctx) -> P
|
|
10
|
+
end
|
|
11
|
+
end
|
data/sig/ffi/type.rbs
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
module FFI
|
|
2
|
+
class Type
|
|
3
|
+
class Array = ArrayType
|
|
4
|
+
class Function = FunctionType
|
|
5
|
+
class Struct = StructByValue
|
|
6
|
+
|
|
7
|
+
include AbstractMemory::_Size
|
|
8
|
+
def initialize: (Integer | Type value) -> self
|
|
9
|
+
def alignment: () -> Integer
|
|
10
|
+
def inspect: ...
|
|
11
|
+
|
|
12
|
+
class Builtin < Type
|
|
13
|
+
def inspect: ...
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
class Mapped[X < _DataConverter[N, R, C], N, R, C]
|
|
17
|
+
include _DataConverter[N, R, C]
|
|
18
|
+
|
|
19
|
+
def initialize: (X converter) -> self
|
|
20
|
+
def converter: () -> X
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
class ArrayType
|
|
25
|
+
def initialize: (Type component_type, Integer length) -> self
|
|
26
|
+
def element_type: -> Type
|
|
27
|
+
def length: -> Integer
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
class FunctionType < Type
|
|
31
|
+
def initialize:
|
|
32
|
+
(
|
|
33
|
+
ffi_type return_type, Array[ffi_type] param_types,
|
|
34
|
+
?blocking: boolish, ?convention: Library::convention, ?enums: Enums
|
|
35
|
+
) -> self
|
|
36
|
+
def param_types: () -> Array[Type]
|
|
37
|
+
def return_type: () -> Type
|
|
38
|
+
end
|
|
39
|
+
end
|
data/sig/ffi.rbs
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
module FFI
|
|
2
|
+
type ffi_type = Type | Symbol
|
|
3
|
+
type ffi_auto_type = ffi_type | DataConverter[untyped, untyped, untyped]
|
|
4
|
+
type type_map = Hash[Symbol | DataConverter[untyped, untyped, untyped], Type]
|
|
5
|
+
|
|
6
|
+
class CallbackInfo = FunctionType
|
|
7
|
+
class FunctionInfo = FunctionType
|
|
8
|
+
class NativeLibrary = DynamicLibrary
|
|
9
|
+
|
|
10
|
+
VERSION: String
|
|
11
|
+
TypeDefs: type_map
|
|
12
|
+
|
|
13
|
+
type current_process = Object
|
|
14
|
+
CURRENT_PROCESS: current_process
|
|
15
|
+
USE_THIS_PROCESS_AS_LIBRARY: current_process
|
|
16
|
+
|
|
17
|
+
private def self.custom_typedefs: () -> type_map
|
|
18
|
+
def self.errno: () -> Integer
|
|
19
|
+
def self.errno=: (Integer) -> nil
|
|
20
|
+
def self.find_type: (ffi_auto_type name, ?type_map? type_map) -> Type
|
|
21
|
+
def self.make_shareable: [T] (T obj) -> T
|
|
22
|
+
def self.map_library_name: (_ToS lib) -> String
|
|
23
|
+
def self.type_size: (ffi_auto_type type) -> Integer
|
|
24
|
+
def self.typedef: (ffi_auto_type old, Symbol add) -> Type
|
|
25
|
+
alias self.add_typedef self.typedef
|
|
26
|
+
end
|
data.tar.gz.sig
CHANGED
|
Binary file
|
metadata
CHANGED
|
@@ -1,18 +1,17 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: ffi
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.17.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Wayne Meissner
|
|
8
|
-
autorequire:
|
|
9
8
|
bindir: bin
|
|
10
9
|
cert_chain:
|
|
11
10
|
- |
|
|
12
11
|
-----BEGIN CERTIFICATE-----
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
12
|
+
MIIEBDCCAmygAwIBAgIBAzANBgkqhkiG9w0BAQsFADAoMSYwJAYDVQQDDB1sYXJz
|
|
13
|
+
L0RDPWdyZWl6LXJlaW5zZG9yZi9EQz1kZTAeFw0yNDAyMjgxOTMxNDdaFw0yNTAy
|
|
14
|
+
MjcxOTMxNDdaMCgxJjAkBgNVBAMMHWxhcnMvREM9Z3JlaXotcmVpbnNkb3JmL0RD
|
|
16
15
|
PWRlMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAwum6Y1KznfpzXOT/
|
|
17
16
|
mZgJTBbxZuuZF49Fq3K0WA67YBzNlDv95qzSp7V/7Ek3NCcnT7G+2kSuhNo1FhdN
|
|
18
17
|
eSDO/moYebZNAcu3iqLsuzuULXPLuoU0GsMnVMqV9DZPh7cQHE5EBZ7hlzDBK7k/
|
|
@@ -23,17 +22,17 @@ cert_chain:
|
|
|
23
22
|
chQPnWX+N3Gj+jjYxqTFdwT7Mj3pv1VHa+aNUbqSPpvJeDyxRIuo9hvzDaBHb/Cg
|
|
24
23
|
9qRVcm8a96n4t7y2lrX1oookY6bkBaxWOMtWlqIprq8JZXM9AgMBAAGjOTA3MAkG
|
|
25
24
|
A1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQWBBQ4h1tIyvdUWtMI739xMzTR
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
25
|
+
7EfMFzANBgkqhkiG9w0BAQsFAAOCAYEArBmHSfnUyNWf3R1Fx0mMHloWGdcKn2D2
|
|
26
|
+
BsqTApXU2nADiyppIqRq4b9e7hw342uzadSLkoQcEFOxThLRhAcijoWfQVBcsbV/
|
|
27
|
+
ZsCY1qlUTIJuSWxaSyS4efUX+N4eMNyPM9oW/sphlWFo0DgI34Y9WB6HDzH+O71y
|
|
28
|
+
R7PARke3f4kYnRJf5yRQLPDrH9UYt9KlBQm6l7XMtr5EMnQt0EfcmZEi9H4t/vS2
|
|
29
|
+
haxvpFMdAKo4H46GBYNO96r6b74t++vgQSBTg/AFVwvRZwNSrPPcBfb4xxeEAhRR
|
|
30
|
+
x+LU7feIH7lZ//3buiyD03gLAEtHXai0Y+/VfuWIpwYJAl2BO/tU7FS/dtbJq9oc
|
|
31
|
+
dI36Yyzy+BrCM0WT4oCsagePNb97FaNhl4F6sM5JEPT0ZPxRx0i3G4TNNIYziVos
|
|
32
|
+
5wFER6XhvvLDFAMh/jMg+s7Wd5SbSHgHNSUaUGVtdWkVPOer6oF0aLdZUR3CETkn
|
|
33
|
+
5nWXZma/BUd3YgYA/Xumc6QQqIS4p7mr
|
|
35
34
|
-----END CERTIFICATE-----
|
|
36
|
-
date:
|
|
35
|
+
date: 2024-06-02 00:00:00.000000000 Z
|
|
37
36
|
dependencies:
|
|
38
37
|
- !ruby/object:Gem::Dependency
|
|
39
38
|
name: rake
|
|
@@ -154,6 +153,7 @@ files:
|
|
|
154
153
|
- ext/ffi_c/libffi.mk
|
|
155
154
|
- ext/ffi_c/libffi.vc.mk
|
|
156
155
|
- ext/ffi_c/libffi.vc64.mk
|
|
156
|
+
- ext/ffi_c/libffi/.allow-ai-service
|
|
157
157
|
- ext/ffi_c/libffi/.appveyor.yml
|
|
158
158
|
- ext/ffi_c/libffi/.appveyor/site.exp
|
|
159
159
|
- ext/ffi_c/libffi/.appveyor/unix-noexec.exp
|
|
@@ -185,6 +185,7 @@ files:
|
|
|
185
185
|
- ext/ffi_c/libffi/README.md
|
|
186
186
|
- ext/ffi_c/libffi/acinclude.m4
|
|
187
187
|
- ext/ffi_c/libffi/autogen.sh
|
|
188
|
+
- ext/ffi_c/libffi/compile
|
|
188
189
|
- ext/ffi_c/libffi/config.guess
|
|
189
190
|
- ext/ffi_c/libffi/config.sub
|
|
190
191
|
- ext/ffi_c/libffi/configure
|
|
@@ -403,6 +404,10 @@ files:
|
|
|
403
404
|
- ext/ffi_c/libffi/testsuite/libffi.call/align_stdcall.c
|
|
404
405
|
- ext/ffi_c/libffi/testsuite/libffi.call/bpo_38748.c
|
|
405
406
|
- ext/ffi_c/libffi/testsuite/libffi.call/call.exp
|
|
407
|
+
- ext/ffi_c/libffi/testsuite/libffi.call/callback.c
|
|
408
|
+
- ext/ffi_c/libffi/testsuite/libffi.call/callback2.c
|
|
409
|
+
- ext/ffi_c/libffi/testsuite/libffi.call/callback3.c
|
|
410
|
+
- ext/ffi_c/libffi/testsuite/libffi.call/callback4.c
|
|
406
411
|
- ext/ffi_c/libffi/testsuite/libffi.call/err_bad_typedef.c
|
|
407
412
|
- ext/ffi_c/libffi/testsuite/libffi.call/ffitest.h
|
|
408
413
|
- ext/ffi_c/libffi/testsuite/libffi.call/float.c
|
|
@@ -711,9 +716,28 @@ files:
|
|
|
711
716
|
- samples/getpid.rb
|
|
712
717
|
- samples/gettimeofday.rb
|
|
713
718
|
- samples/hello.rb
|
|
719
|
+
- samples/hello_ractor.rb
|
|
714
720
|
- samples/inotify.rb
|
|
715
721
|
- samples/pty.rb
|
|
716
722
|
- samples/qsort.rb
|
|
723
|
+
- samples/qsort_ractor.rb
|
|
724
|
+
- sig/ffi.rbs
|
|
725
|
+
- sig/ffi/abstract_memory.rbs
|
|
726
|
+
- sig/ffi/auto_pointer.rbs
|
|
727
|
+
- sig/ffi/buffer.rbs
|
|
728
|
+
- sig/ffi/data_converter.rbs
|
|
729
|
+
- sig/ffi/dynamic_library.rbs
|
|
730
|
+
- sig/ffi/enum.rbs
|
|
731
|
+
- sig/ffi/function.rbs
|
|
732
|
+
- sig/ffi/library.rbs
|
|
733
|
+
- sig/ffi/native_type.rbs
|
|
734
|
+
- sig/ffi/pointer.rbs
|
|
735
|
+
- sig/ffi/struct.rbs
|
|
736
|
+
- sig/ffi/struct_by_reference.rbs
|
|
737
|
+
- sig/ffi/struct_by_value.rbs
|
|
738
|
+
- sig/ffi/struct_layout.rbs
|
|
739
|
+
- sig/ffi/struct_layout_builder.rbs
|
|
740
|
+
- sig/ffi/type.rbs
|
|
717
741
|
homepage: https://github.com/ffi/ffi/wiki
|
|
718
742
|
licenses:
|
|
719
743
|
- BSD-3-Clause
|
|
@@ -724,7 +748,6 @@ metadata:
|
|
|
724
748
|
wiki_uri: https://github.com/ffi/ffi/wiki
|
|
725
749
|
source_code_uri: https://github.com/ffi/ffi/
|
|
726
750
|
mailing_list_uri: http://groups.google.com/group/ruby-ffi
|
|
727
|
-
post_install_message:
|
|
728
751
|
rdoc_options:
|
|
729
752
|
- "--exclude=ext/ffi_c/.*\\.o$"
|
|
730
753
|
- "--exclude=ffi_c\\.(bundle|so)$"
|
|
@@ -741,8 +764,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
741
764
|
- !ruby/object:Gem::Version
|
|
742
765
|
version: '0'
|
|
743
766
|
requirements: []
|
|
744
|
-
rubygems_version: 3.
|
|
745
|
-
signing_key:
|
|
767
|
+
rubygems_version: 3.6.0.dev
|
|
746
768
|
specification_version: 4
|
|
747
769
|
summary: Ruby FFI
|
|
748
770
|
test_files: []
|
metadata.gz.sig
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
�'44�Y�f���}q憻-@v2f�v"�7ZG��^9�Sӯ�r��J�Qw�j4�+5�������#�}�i�����%��:�}��%���8g�d:kv���7�Sg=]?�9״:{4����9��xԌ4�F��$�d�>�˱���ۀ
|
|
2
2
|
��h~��G-QF�F��y���ׅ���l�ZU~5el�n����|뻆_c�2�u���R�f�Q��SE>5���X w��˰���xM�Z//�ޑ�S�`�|�������<g$/rb�U�dzY���i���^�¼�hz;�hj��p#���Mc�V��aJ���Թ��_ϭ��7 h�Ν9�����I���݂����� Ȅ�f���?Γ��
|